获取文件的相对路径 C#

Get relative Path of a file C#

我目前正在用 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"));

但它并不那么优雅。

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

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

将沿着路径树往上走两层 return "C:\TFS\MySolution\Project1"

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

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

如果 xml 是您项目的静态部分(您不会在运行时覆盖它),那么最好的办法可能是将它包含到您的 dll 中。

  • 转到文件属性并将其设为嵌入式资源
  • 直接从dll资源加载即可,例如

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