当我运行以下代码时,c:\temp
中的正确创建的XML文件:
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 :(得分:7)
依靠“当前目录”概念始终是危险的,因此您需要一个起点。在WinForms项目中,您可以使用
获取.EXE的位置string exeFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
在WPF中会有类似的东西。
但是如果您在库中并且无法访问Application(或Environment)对象,则应考虑使用BaseFolder参数或属性让主应用程序控制文件夹。
答案 1 :(得分:3)
./Data/CustomerMock2.xml
是否有效?
using (StreamWriter wr = new StreamWriter("./Data/CustomerMock2.xml"))
答案 2 :(得分:3)
您是否在编译时设置要复制的XML数据(因此它不在实际项目目录中,而是在bin文件夹中)?在这种情况下,您可以使用
进行操作string xmlFile = string.Format("{0}/Data/{1}",AppDomain.CurrentDomain.BaseDirectory,"myxml.xml");
答案 3 :(得分:0)
相对路径相对于当前目录。也许你不在bin / debug目录中...你应该根据exe目录构建绝对路径,如Chris所示。 此外,StreamWriter构造函数不会创建目录,如果它不存在,您需要显式创建它。