ASP.NET में बाह्य C # कक्षाओं में Server.MapPath का उपयोग करना


132

मैं एक C # कक्षा में कुछ फ़ाइलों का संपूर्ण पथ प्राप्त करने का प्रयास कर रहा हूं। Server.MapPathASPX और उनके कोड के पीछे के पन्नों के लिए बहुत अच्छा काम करता है, लेकिन यह किसी अन्य वर्ग फ़ाइल में मौजूद नहीं है। मैंने कोशिश की HostingEnvironment.MapPath(), लेकिन यह शिकायत करता है कि रिश्तेदार आभासी पथ की अनुमति नहीं है। कोई विचार?

System.Web पहले से ही आयातित है।

जवाबों:


302

ServerUtilityवर्ग अपने में एक उदाहरण के रूप में उपलब्ध है HttpContext। यदि आप ऐसे वातावरण में हैं जहाँ आपको पता है कि इसे ASP.Net पाइपलाइन के अंदर निष्पादित किया जाएगा, तो आप उपयोग कर सकते हैं

HttpContext.Current.Server.MapPath()

आपको System.Webहालांकि आयात करना होगा ।


1
भले ही यह पोस्ट 2 साल से अधिक पुरानी हो, फिर भी आपने मेरी जबरदस्त मदद की है। धन्यवाद।
Iarwain01

6
क्या होगा अगर इसे उस पाइपलाइन में निष्पादित नहीं किया जाता है?
zaitsman

यदि आप ASP.Net के अंदर निष्पादित नहीं कर रहे हैं, तो यह संभावना नहीं है कि आपका HttpContext सेट किया जा रहा है, जब तक कि आपने अपनी पाइपलाइन नहीं लिखी है :) आपको अपने निष्पादन के संदर्भ (राउटर) को प्रदान करने वाले तरीकों पर निर्भर रहना होगा। यदि आपकी प्रक्रिया में आपके मार्ग मार्ग की मूल बातें के लिए अंतर्दृष्टि है तो आप System.IO.Path विधियों पर एक नज़र डाल सकते हैं।
womp

यह संकलित लेकिन संदर्भ नियंत्रकों के बाहर शून्य है, इसलिए मेरी कोड त्रुटियाँ हैं। मुझे लगता है कि वाउप वहीं बात कह रहे हैं। यदि इस मामले में आप रूटर्स के बाहर MapPath का उपयोग कर सकते हैं?
२३

34

आप भी उपयोग कर सकते हैं:

var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")

अगर

var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");

दुर्गम है


8

क्या आप केवल एक संदर्भ नहीं जोड़ System.Webसकते हैं और तब आप उपयोग कर सकते हैं Server.MapPath?

संपादित करें: आजकल मैं HostingEnvironment.MapPathविधि का उपयोग करने की सलाह दूंगा :

यह System.Webअसेंबली में एक स्थिर तरीका है जो सर्वर पर एक भौतिक पथ के लिए वर्चुअल पथ को मैप करता है। इसके लिए संदर्भ की आवश्यकता नहीं है HttpContext


बाहरी वर्गों में नहीं।
फनविलालोस्ट

सुनिश्चित करें कि आप संदर्भ को एक बाहरी वर्ग में जोड़ सकते हैं; लेकिन स्पष्ट रूप से आपको इसे सर्वर अनुरोध के संदर्भ में उपयोग करने की आवश्यकता है ताकि HttpContext शून्य न हो।
दान डिप्लो

4
System.Reflection.Assembly.GetAssembly(type).Location

यदि आप जिस फ़ाइल को प्राप्त करने का प्रयास कर रहे हैं, वह एक प्रकार के लिए असेंबली का स्थान है। लेकिन अगर फाइलें असेंबली लोकेशन के सापेक्ष हैं तो आप System.IOफाइल के सटीक रास्ते को प्राप्त करने के लिए इसे नाम स्थान के साथ उपयोग कर सकते हैं ।


-1: क्या आप मानते हैं कि वह एक विधानसभा का स्थान चाहते थे?
जॉन सॉन्डर्स

1
उन्होंने कहा कि "कुछ फाइलें" उन्होंने फाइलों के स्थान या प्रकृति को निर्दिष्ट नहीं किया है, इस प्रकार विधानसभा स्थान को जानना और उस पथ के सापेक्ष काम करने में सक्षम होना सहायक हो सकता है। बेशक अगर वह वास्तव में कहा जाता है कि वह अभी भी एक HttpContext में था तो मैंने जवाब देने की जहमत नहीं उठाई होगी।
डेविड मैकएविंग

डेविड मैकएविंग, जो आप सुझाव देते हैं वह काम नहीं करेगा क्योंकि IIS उन असेंबली को उस स्थान से लोड नहीं करता है जिसे आप उन्हें वेब साइट में स्थापित करते हैं। वे एक अस्थायी asp.net कैश स्थान से कॉपी और लोड किए गए हैं, इसलिए GetAssembly या GetExecutingAssembly करना आपको विधानसभा के स्थान पर इंगित करेगा, लेकिन इसका उस वेब साइट के स्थान से कोई लेना-देना नहीं होगा जो MapPath इंगित करता है।
zumalifeguard


3
class test
{
public static void useServerPath(string path)
{
   if (File.Exists(path)
{
 \\...... do whatever you wabt
}
else
{
\\.....
}
}

अब जब आप codebehind से विधि कहते हैं

उदाहरण के लिए :

protected void BtAtualizacao_Click(object sender, EventArgs e)
        {
             string path = Server.MapPath("Folder") + "\\anifile.txt";

            test.useServerPath(path);
}

इस तरह से आपका कोड सरल है और एक विधि के साथ यू प्रत्येक कॉल के लिए कई पथ का उपयोग कर सकता है :)


3

इसने मेरे लिए मदद की

//System.Web.HttpContext.Current.Server.MapPath //        
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

Stackoverflow में आपका स्वागत है। थोड़ा और स्पष्टीकरण साथी प्रोग्रामरों को यह समझने में मदद करेगा कि समाधान क्यों काम किया।
NJInamdar

1

आप ASP.NET के संदर्भ में चल रहे हैं या नहीं, आपको HostingEnvironment.ApplicationPhysicalPath का उपयोग करने में सक्षम होना चाहिए


0

Server.mappath ("") aspx पृष्ठ पर काम करेगा, यदि आप एक क्लास फ़ाइल से पूर्ण पथ प्राप्त करना चाहते हैं, तो आपको इसका उपयोग करना होगा-

HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.