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

本文关键字:错误 路径 返回 GetFullPath Path | 更新日期: 2023-09-27 18:20:27

根据MSDN文档,要获得文件的完整文件路径,请使用

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

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

'K:''HeadlineAutoTrader''Autotrader.Infrastructure。HeadlineFeeds''Data''KeywordsAndPhrases.txt'

如果没有,它会返回;

'K:''HeadlineAutoTrader''AutotraderTest''bin''Debug''Data''KeywordsAndPhrases.txt'

这在某种程度上是有道理的,因为我正在测试的代码正在测试项目中运行。

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

这是一个基于WPF的项目,显然在web应用程序中会更容易,因为Server.MapPath的效果很好

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

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

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

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

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

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

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

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

因此,该方法的行为与文档一样。

如果您想要相对于主可执行文件的路径,请查看获取正在执行的exe';的路径?

您获得的路径在技术上是正确的,因为您从代码中的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