2009-07-29 247 views
4

當我運行下面的代碼,XML文件是c:\temp正確創建如何使用相對路徑使用StreamWriter創建文件?

XmlSerializer xs = new XmlSerializer(typeof(ObservableCollection<Models.Customer>)); 
using (StreamWriter wr = new StreamWriter("C:/temp/CustomerMock2.xml")) 
{ 
    xs.Serialize(wr, CustomerList); 
} 

然而,其實我希望它在子目錄項目下創建,但當我這樣做:

using (StreamWriter wr = new StreamWriter("Data/CustomerMock2.xml")) 

它只是充當如果它寫,但該文件不會出現在該目錄

C:\Projects\Prototype12\CustomersModul\bin\Debug\Data

我如何可以創建StreamWriter的一個文件,我的項目中的相對路徑?

+0

ASP.NET或Windows? – 2009-07-29 09:08:22

回答

1

是否./Data/CustomerMock2.xml工作?

using (StreamWriter wr = new StreamWriter("./Data/CustomerMock2.xml")) 
7

依靠'當前目錄'概念總是很危險,所以你需要一個起點。在一個WinForms項目中,你可以得到.EXE的位置

string exeFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath); 

在WPF中會有類似的東西。

但是,如果您在庫中並且無法訪問應用程序(或環境)對象,則應考慮製作BaseFolder參數或屬性,以使主應用程序能夠控制文件夾。

3

你設置的XML數據在編譯時被複制(所以它不是在實際的項目目錄,但bin文件夾)?在這種情況下,您可以使用它

string xmlFile = string.Format("{0}/Data/{1}",AppDomain.CurrentDomain.BaseDirectory,"myxml.xml"); 
0

相對路徑是相對於當前目錄。也許你不在bin/debug目錄中......你應該建立基於exe目錄的絕對路徑,如Chris所示。 另外,StreamWriter構造函數不會創建該目錄,如果它不存在,則需要明確地創建該目錄。