当两个文件在C#中的不同位置具有相同名称时,查找特定的文件路径

时间:2018-12-03 12:00:34

标签: c# xml

我正在尝试在代码中加载并保存一个名为Modules.xml的xml文件。我目前已将文件路径进行了硬编码,如下所示。我试图在我的代码中获取文件路径,而不对其进行硬编码。

我尝试使用Path.GetDirectoryName new FileInfo("Modules.xml").Directory.FullName。但是,当我需要的文件位于主解决方案文件夹中时,这两个文件都将我的调试文件夹中的文件作为目标。

有没有一种方法可以将文件定位到我的主解决方案文件夹中,而不是我的调试文件夹中? (两个文件都称为Modules.xml)

doc.Save("C:\\Users\\Matthew\\Desktop\\Year4\\Object Oriented\\Project1\\Project1\\Modules.xml");

两个文件的位置如下所示:

C:\Users\Matthew\Desktop\Year4\Object Oriented\Project1\Project1\Modules.xml

^^^这是我的代码所需的文件路径^^^

C:\Users\Matthew\Desktop\Year4\Object Oriented\Project1\Project1\bin\Debug\Modules.xml

2 个答案:

答案 0 :(得分:0)

这里最好的方法是使用配置文件,例如 app.config ,用于存储这样的字符串。然后,您可以更改文件路径而无需重新编译代码,并且文件可以存储在应用程序可访问的任何位置。

如果您确实要按照说明的方式访问文件,AppDomain.CurrentDomain.BaseDirectory将在运行时为您提供 bin / Debug 位置。然后您可以从那里找到相对路径,例如:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\", fileName);

例如,其中fileName是“ Modules.xml”。

答案 1 :(得分:0)

  

我尝试使用Path.GetDirectoryName和new   FileInfo(“ Modules.xml”)。Directory.FullName。但是,这两个   当我需要的文件位于目录中时,将文件定位到我的调试文件夹中   主解决方案文件夹。

这是因为bin\Debug是启动和运行项目时的工作目录。要更改此设置,可以将working directory environment variable设置为指向解决方案目录(而不是bin\debug|release),我不建议这样做。因为当您最终完成开发并发布应用程序时,将没有任何解决方案目录可以保存您的XML文件。我建议将XML文件复制到输出文件夹。无论您是处于开发(调试)还是生产(发布)模式,XML始终都将被复制到最终目录。您可以使用AppDomain.CurrentDomain.BaseDirectory之类的名称访问工作目录。要启用将XML复制到输出目录,请右键单击它,选择“属性”,将Build Action设置为None,并将Copy to Output Directory设置为Copy AlwaysCopy if newer。您现在可以出发了。