获取文件的相对路径C#

时间:2016-12-06 11:42:38

标签: c# path filepath relative

我目前正在c#的visual studio中编写一个项目。 项目的完整路径是:

"C:\TFS\MySolution\"

我有一个我需要在执行期间加载的文件。让我们说文件路径是

"C:\TFS\MySolution\Project1\NeedtoLoad.xml"

我不想编写硬编码的完整路径,并希望以动态方式获取路径。

我使用以下行:

    var path = Directory.GetCurrentDirectory();

我找到的每个方法和上面的代码行都会得到以下路径的问题:

"C:\TFS\MySolution\Project1\bin\Debug"

我需要的是

"C:\TFS\MySolution\Project1\"

所以我可以连接

NeedtoLoad.xml

答案。

当然我能做到:

path.Substring(0, path.IndexOf("bin\\Debug"));

但它并不那么优雅。

在您说问题是重复之前 请再次阅读这个问题,因为我没有找到任何可以做到这一点。

3 个答案:

答案 0 :(得分:3)

您可以使用Directory.GetParent及其Parent成员

string path = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;

将升级路径树并返回"C:\TFS\MySolution\Project1"

答案 1 :(得分:0)

如果该文件是项目的一部分,则应确保在构建时将其复制到项目输出中。

在解决方案资源管理器中选择文件,然后转到Visual Studio(F4)中的属性窗格。选择内容'作为“构建”动作'。现在,在构建解决方案时,文件将被复制到输出目录(bin / Debug或bin / Release)。

答案 2 :(得分:0)

如果xml是项目的静态部分(在运行时没有覆盖它),那么最好将它包含在你的dll中。

  • 转到文件属性并将其设为嵌入式资源
  • 只需从dll资源加载它,例如

    var asm = Assembly.GetCallingAssembly();
    using (var stream = asm.GetManifestResourceStream(resource))
    {
        var reader = new StreamReader(stream);
        return reader.ReadToEnd();
    }