2010-05-06 19 views
12

मेरे पास मेरे App_Data फ़ोल्डर में PageData.xml नाम की एक एक्सएमएल फ़ाइल है। मैं XDocument.Load का उपयोग कर इस फ़ाइल के साथ एक एक्सडॉक्यूमेंट पॉप्युलेट करना चाहता हूं।मैं XDocument.Load में एक सापेक्ष पथ का उपयोग कैसे करूं?

अगर मैं पूर्ण शारीरिक पथ यह काम करता है, यानी .:

XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml"); 

... जहां "काम" मेरी सी पर एक फ़ोल्डर है की आपूर्ति: ड्राइव।

अगर मैं इस तरह एक रिश्तेदार पथ की कोशिश है, हालांकि, मैं एक DirectoryNotFoundException मिलती है:

XDocument vXDoc = XDocument.Load("AppData/PageData.xml"); 

"पथ का एक हिस्सा नहीं मिल सका 'C: \ Program Files (x86) \ Common Files \ Microsoft \ DevServer \ 10.0 \ AppData \ PageData.xml 'साझा किया गया। "

यह स्पष्ट रूप से गलत है, लेकिन सही सापेक्ष पथ निर्धारित करने का एक आसान तरीका होना चाहिए? मैं क्या देख रहा हूँ आपकी मदद की सराहना की है।

उत्तर

21

कुछ तरीके हैं जो आप कर सकते हैं।

XDocument xdoc = XDocument.Load(Server.MapPath("/App_Data/PageData.xml")); 

या आप Request.PhysicalApplicationPath रूप में अच्छी तरह ताकि तरह उपयोग कर सकते हैं,:: आप एक भौतिक निर्देशिका पथ में एक वर्चुअल निर्देशिका चालू करने के लिए उपयोग कर सकते हैं Server.MapPath()

var path = Path.Combine(Request.PhysicalApplicationPath, "App_Data\\PageData.xml"); 
XDocument xdoc = XDocument.Load(path); 

या तो मामले में, समस्या यह है कि वर्तमान कार्यकर्ता प्रक्रिया की कार्यशील निर्देशिका आमतौर पर एप्लिकेशन निर्देशिका पर सेट नहीं होती है (ऐसा इसलिए है क्योंकि कार्य निर्देशिका एक प्रक्रिया-व्यापी संपत्ति है, और एक प्रक्रिया कई वेबसाइटों को होस्ट कर सकती है)। More information is here

+4

आपकी त्वरित प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। आपका पहला सुझाव मेरे लिए "जैसा है" के लिए काम नहीं करता है, लेकिन अगर मैं पथ में '~' जोड़ता हूं तो यह पूरी तरह से काम करता है, यानी: एक्सडी दस्तावेज़ xdoc = XDocument.Load (Server.MapPath ("~/App_Data/PageData .xml ")); आपकी मदद के लिए बहुत धन्यवाद। – PaulC

+1

यह एक आईआईएस 6 चीज प्रतीत होता है, एडीएन मैं आईआईएस 7 का उपयोग कर रहा हूं। – zeristor

संबंधित मुद्दे