Path.GetFullPath在C#中返回错误的路径

时间:2015-11-02 23:07:54

标签: c# wpf filepath

根据MSDN文档,要获取文件的完整文件路径

var fileName = Path.GetFullPath("KeywordsAndPhrases.txt");

我将假设为其所在的项目提供该文件的完整路径。

  

' K:\ HeadlineAutoTrader \ Autotrader.Infrastructure.HeadlineFeeds \数据\ KeywordsAndPhrases.txt'

它没有,它返回;

  

' K:\ HeadlineAutoTrader \ AutotraderTests \ BIN \调试\数据\ KeywordsAndPhrases.txt'

这有点意义,因为我在测试项目中运行了测试代码。

所以问题是如何在同一解决方案中的另一个类库的文件夹中获取文本文件的完整文件路径?

这是一个基于WPF的项目,显然它在Web应用程序中会更容易,因为Server.MapPath工作得很好

3 个答案:

答案 0 :(得分:3)

当您调用File.GetFullPath时,库会查看正在执行的程序的当前目录。除非另有说明,否则这与可执行文件所在的文件夹相同。

你可能有"复制到输出目录"设置为"始终复制"或者"复制如果更新"在Visual Studio中KeywordsAndPhrases.txt文件的属性中,这意味着它被复制到与可执行文件相同的文件夹中。否则,该文件可能已被某些其他过程复制(例如,手动,后构建步骤批处理文件)。这就是为什么它在K:\HeadlineAutoTrader\AutotraderTests\bin\Debug而不是K:\HeadlineAutoTrader\Autotrader.Infrastructure.HeadlineFeeds下找到该文件。

  

如何在同一解决方案中的另一个类库的文件夹中获取文本文件的完整文件路径?

这个问题没有意义。可执行文件不了解类库或Visual Studio项目中的文件结构。可执行文件了解嵌入在程序集中的资源或文件夹中的文件。如果要查找特定文件的完整路径,请使用Environment.CurrentDirectory将当前目录设置为该文件夹,或使用已知的相对路径。

答案 1 :(得分:1)

来自https://msdn.microsoft.com/en-us/library/system.io.path.getfullpath%28v=vs.110%29.aspx

  

此方法使用当前目录和当前卷信息来完全限定路径。如果仅在路径中指定文件名,则GetFullPath将返回当前目录的完全限定路径。

您可以使用Environment.CurrentDirectory调查当前工作目录。

因此该方法的行为与文档相同。

如果您想要相对于主要可执行文件的路径,请查看What is the best way to get the executing exe's path in .NET?

答案 2 :(得分:0)

您获得的路径在技术上是正确的,因为您在代码中的bin \ debug文件夹中引用它

var fileName = Path.GetFullPath("KeywordsAndPhrases.txt");

如果您要从

这样的地方获取文件
var dir = Environment.SpecialFolder.ProgramFilesX86;
var path = Path.Combine(dir.ToString(), "file.txt");

然后

var fileName = Path.GetFullPath(path);

然后你会得到正确的结果,在这个例子中是

c:\programfiles(86)\file.txt