.NET वेब एप्लिकेशन में वर्तमान निर्देशिका प्राप्त करना


105

इसलिए मेरे पास एक वेब प्रोजेक्ट है, और मैं c # पद्धति का उपयोग करके वेबसाइट की रूट डायरेक्टरी प्राप्त करने की कोशिश कर रहा हूं Directory.GetCurrentDirectory()। मैं स्थैतिक पथ का उपयोग नहीं करना चाहता क्योंकि भविष्य में फ़ाइल स्थान बदलते रहेंगे। यह तरीका मेरी इमेजप्रोसेस .aspx.cs फ़ाइल में चल रहा है, लेकिन मुझे लगा कि यह कहां वापस आएगा:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

मैं इसके बजाय हो रहा हूँ:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

क्या कोई समझा सकता है कि ऐसा क्यों हो रहा है और इसका एक संभावित समाधान क्या हो सकता है? बहुत बहुत धन्यवाद।


संबंधित पोस्ट यहाँ जो सामान्य रूप से .Net अनुप्रयोग निष्पादन पथ के बारे में बात करता है।
RBT

जवाबों:


210

वर्तमान निर्देशिका एक सिस्टम-स्तरीय विशेषता है; यह उस निर्देशिका को लौटाता है जिससे सर्वर लॉन्च किया गया था। इसका वेबसाइट से कोई लेना-देना नहीं है।

आप चाहते हैं HttpRuntime.AppDomainAppPath

यदि आप HTTP अनुरोध में हैं, तो आप कॉल भी कर सकते हैं Server.MapPath("~/Whatever")


2
धन्यवाद। मैं वास्तव में तलाश कर रहा था HttpRuntime.BinDirectory, लेकिन डिबगर में यह निर्धारित करना आसान था, एक बार मैंने कोशिश की कि आपने अपने उत्तर में क्या उल्लेख किया है।
केंट वीगेल

यदि मैं `Server.MapPath (" ~ जो कुछ भी ") का उपयोग करता हूं और IIS साइट myserver में होस्ट की जाती है । मुझे Myserver / जो भी फ़ोल्डर है , उसके बजाय C: \\ somefolder \ जो भी मिले
19

@ Si8: हाँ; वही Server.MapPathकरता है। आप stackoverflow.com/q/5823847/34397
SLaks

2
यदि आप .NET असेंबली (या तत्काल विंडो में हैं) से अपरिचित हैं, तो पूर्ण कमांड हैं System.Web.HttpRuntime.AppDomainAppPathऔरSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
टेस्टपैटर्न

2
@testpattern HttpContextहै System.Web.HttpContext.Current.Server.MapPath("~"), नहींHttpRuntime
चेंगज़ी

112

इस कोड का उपयोग करें:

 HttpContext.Current.Server.MapPath("~")

विस्तृत संदर्भ:

Server.MapPath भौतिक निर्देशिका में मैप करने के लिए सापेक्ष या आभासी पथ निर्दिष्ट करता है।

  • Server.MapPath(".") फ़ाइल की वर्तमान भौतिक निर्देशिका (जैसे aspx) निष्पादित की जा रही है
  • Server.MapPath("..") मूल निर्देशिका लौटाता है
  • Server.MapPath("~") आवेदन के मूल में भौतिक पथ देता है
  • Server.MapPath("/") डोमेन नाम के रूट पर भौतिक पथ लौटाता है (जरूरी नहीं कि यह एप्लिकेशन की जड़ जैसा ही हो)

एक उदाहरण:

मान लीजिए कि आपने एक वेब साइट एप्लिकेशन ( http://www.example.com/ ) को इंगित किया है

C:\Inetpub\wwwroot

और अपनी दुकान एप्लिकेशन (IIS में आभासी निर्देशिका के रूप में उप वेब, एप्लिकेशन के रूप में चिह्नित) को स्थापित किया

D:\WebApps\shop

उदाहरण के लिए, यदि आप Server.MapPathनिम्नलिखित अनुरोध में कॉल करते हैं:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

फिर:

Server.MapPath(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

यदि पथ या तो आगे (/) या पिछड़े स्लैश () के साथ शुरू होता है, तो MapPathपथ एक पथ देता है जैसे कि पथ पूर्ण, आभासी पथ था।

यदि पथ स्लैश से प्रारंभ नहीं होता है, तो MapPathविधि संसाधित किए जा रहे अनुरोध की निर्देशिका के सापेक्ष पथ लौटाती है।

नोट: C # में, @ शब्दशः शाब्दिक स्ट्रिंग ऑपरेटर है जिसका अर्थ है कि स्ट्रिंग को "जैसा है" का उपयोग किया जाना चाहिए और भागने के अनुक्रम के लिए संसाधित नहीं किया जाना चाहिए।

फुटनोट

Server.MapPath(null)और Server.MapPath("")इस प्रभाव को भी पैदा करेगा।


17
की सही प्रतिलिपि stackoverflow.com/questions/275781/...
GGO

3
@GGO अच्छा लिंक! लिंक के बाद, मैंने System.Web.Hosting.HostingEnvironment.MapPath("~")इसके बजाय करना शुरू कर दिया, जो कि बहुत अच्छा काम करता है, जिस पर कोई निर्भरता नहीं हैSystem.Web.HttpContext.Current
मैक्स बैरक्लो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.