2009-04-11 180 views
1

我覺得有點愚蠢,甚至問這個問題, 但我坐在一個小時試圖找出如何解決問題。 我目前正在做一個項目,使用ASP.NET和XML,對於我的項目,我從Visual Studio創建了新的網站,並試圖將我的XML文件保留在App_Data中。無法找到xml路徑錯誤

然而,當我嘗試使用代碼:

var topic = from t in XElement.Load("App_Data/topics.xml").Elements("topics") 
        select new 
        { 
         topic_id = t.Attribute("id"), 
         topic_subject = t.Element("topicname"), 
         topic_short_body = t.Element("topicshortbody") 
        }; 

我得到一個錯誤:

Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\App_Data\topics.xml'. 

Source Error: 

Line 23:  { 
Line 24: 
Line 25:   var topic = from t in XElement.Load("App_Data/topics.xml").Elements("topics") 
Line 26:      select new 
Line 27:      { 


Source File: d:\college\xml\xmlproject\Default.aspx.cs Line: 25 

我絕對相信我的文件中的App_Data。 所以我的問題是否有其他方式來指定路徑,或者如何在我的情況下指定路徑的正確方法?

預先感謝您。

回答

3

使用Request.ApplicationPath

XElement.Load(Request.ApplicationPath + "/App_Data/topics.xml"); 

這將確保您試圖加載在正確的位置的文件,默認情況下該過程在「C運行:\ Program Files文件\微軟的Visual Studio 9.0 \ Common7 \ IDE \「(調試Web服務器),在生產服務器上,該路徑很可能位於C:\ windows \ system32 \或IIS進程所在的位置。

在ASP.NET中處理文件時,務必使路徑爲絕對路徑。

您也可以使用System.IO.Path.Combine(Request.ApplicationPath,「App_Data/topics.xml」)來確保您的字符串concat是'正確的'。

3

因爲它可能對其他人有用。 我找到的另一種解決方案

String xmlpath = Server.MapPath("App_Data/topics.xml");