2016-12-06 249 views
2

我目前在c#中的visual studio中编写项目。 项目完整路径是:获取文件的相对路径C#

"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")); 

但它不是那么优雅。

之前你说这个问题是重复的 请再次阅读问题,因为我没有找到任何这样做。

回答

2

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

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

会去平了路径树,并返回"C:\TFS\MySolution\Project1"

0

如果该文件是您的项目的一部分,您应确保它在生成时复制到项目输出中。

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

0

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

  • 转到文件属性,使其嵌入的资源
  • 只需从DLL资源,例如加载它

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