如何使用相对路径使用StreamWriter创建文件?

时间:2009-07-29 09:05:24

标签: c# wpf file-io prism

当我运行以下代码时,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创建一个带有项目内相对路径的文件?

4 个答案:

答案 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构造函数不会创建目录,如果它不存在,您需要显式创建它。