2009-07-29 208 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构造函数不会创建该目录,如果它不存在,则需要明确地创建该目录。