2010-05-06 30 views
12

Tôi có một tệp XML có tên PageData.xml trong thư mục App_Data của mình. Tôi muốn cư một XDocument với tập tin này bằng cách sử dụng XDocument.Load.Làm cách nào để sử dụng đường dẫn tương đối trong XDocument.Load?

Nếu tôi cung cấp đường dẫn đầy đủ về thể chất nó hoạt động, tức là .:

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

... nơi "làm việc" là một thư mục trên C của tôi: ổ đĩa.

Nếu tôi cố gắng một đường dẫn tương đối như thế này, tuy nhiên, tôi nhận được một DirectoryNotFoundException:

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

"Không thể tìm thấy một phần của đường dẫn 'C: \ Program Files (x86) \ Common Files \ Microsoft Đã chia sẻ \ DevServer \ 10.0 \ AppData \ PageData.xml '. "

Điều này rõ ràng là sai, nhưng phải có cách dễ dàng để đặt đường dẫn tương đối chính xác? Tôi đang nhìn gì? Trợ giúp của bạn được đánh giá cao.

Trả lời

21

Có một số cách bạn có thể thực hiện. Bạn có thể sử dụng Server.MapPath() để biến một thư mục ảo thành một đường dẫn thư mục vật lý:

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

Hoặc bạn có thể sử dụng Request.PhysicalApplicationPath là tốt, như vậy:

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

Trong cả hai trường hợp, vấn đề là dòng điện thư mục làm việc của quy trình công nhân thường là không phải là được đặt thành thư mục ứng dụng (điều này là do thư mục làm việc là thuộc tính toàn bộ quy trình và một quy trình có thể lưu trữ nhiều trang web). More information is here.

+4

Cảm ơn rất nhiều vì phản hồi nhanh chóng của bạn. Đề xuất đầu tiên của bạn không hoạt động đối với tôi "nguyên trạng", nhưng nếu tôi thêm dấu '~' vào đường dẫn hoạt động hoàn hảo, tức là: XDocument xdoc = XDocument.Load (Server.MapPath ("~/App_Data/PageData .xml ")); Rất cám ơn sự giúp đỡ của bạn. – PaulC

+1

Điều này có vẻ là một điều IIS6, adn tôi đang sử dụng IIS7. – zeristor

Các vấn đề liên quan