2011-11-08 34 views
0

我試圖加載XML文件,它是在項目\數據:無法從項目 data文件夾在C#中運行時加載文件,如下圖所示

  XmlDocument memoryDoc = new XmlDocument(); 
      memoryDoc.Load(@"Data/Memories.xml"); 
      XmlNode xmlNode_Memories = memoryDoc.SelectSingleNode("Memories"); 
      XmlElement xmlElement_Memory = memoryDoc.CreateElement("Memory"); 
      xmlElement_Memory.SetAttributeNode("Title", ""); 
      xmlElement_Memory.SetAttribute("Title", "hijdnjh9d2qhei"); 
      xmlNode_Memories.AppendChild(xmlElement_Memory); 
      memoryDoc.Save(@"Data/Memories.xml"); 

但程序試圖從Project \ bin \ Debug \ Data加載它不存在,並且它哭泣。如何從Project \ Data加載它,而不必包含完整路徑,即使僅用於測試目的?

當將程序打包到安裝程序中時,這也會導致問題,因此需要我在加載之前將文件複製到其他位置?

+0

你在發佈或調試模式下運行? bin \ Release或bin \ Debug文件夾中是否有名爲Data的文件夾?如果您引用相對路徑,則必須將Data文件夾與xml文件放在可執行文件所在的相同文件夾中。 – Tudor

+0

編譯應用程序後,Memories.xml文件是否出現在bin目錄下?對於Memroies.xml文件,您可能必須將生成操作設置爲「嵌入資源」並將「複製到」輸出目錄設置爲「始終複製」。 –

+0

@Tudor我目前正在Debug模式下運行。所以,如果我要安裝這個程序然後運行它,我需要確保我引用的任何相對路徑從可執行文件的相同文件夾開始? – duney

回答

0

那是因爲你的exe文件從項目\ BIN \ debug目錄中運行(這就是您的構建輸出變爲當你按在Visual Studio F5 /運行/調試,假設你正在做調試版本發生。

如果你想避免一個硬編碼路徑,你可以使用post build事件將文件複製到Project \ bin \ debug \ data目錄。

右鍵單擊解決方案資源管理器中的項目並選擇屬性。轉到Build Events選項卡,就像寫一個批處理文件一樣,你可以從那裏拷貝文件(點擊「編輯」,然後按下宏按鈕 - 有擴展變量提供你的路徑)

的命令看起來是這樣的(從內存中,所以可能有點關):

copy $(ProjectDir)\Data\Memories.xml $(TargetDir)\data\. 
相關問題