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

C# Path.GetFullPath在C中返回错误路径#,c#,wpf,filepath,C#,Wpf,Filepath,根据MSDN文档,要获取文件的完整文件路径,请使用 var fileName = Path.GetFullPath("KeywordsAndPhrases.txt"); 我假设它为它所在的项目提供了该文件的完整路径 'K:\HeadlineAutoTrader\Autotrader.Infrastructure.HeadlineFeeds\Data\keywords和phrases.txt' 如果它没有,它就会返回 'K:\HeadlineAutoTrader\AutotraderTests\

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

var fileName = Path.GetFullPath("KeywordsAndPhrases.txt");
我假设它为它所在的项目提供了该文件的完整路径

'K:\HeadlineAutoTrader\Autotrader.Infrastructure.HeadlineFeeds\Data\keywords和phrases.txt'

如果它没有,它就会返回

'K:\HeadlineAutoTrader\AutotraderTests\bin\Debug\Data\keywordsandshages.txt'

这有点道理,因为我正在测试的代码正在测试项目中运行

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

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

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

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

因此,该方法的行为符合文件规定


如果您想要相对于主可执行文件的路径,请查看

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

var fileName = Path.GetFullPath("KeywordsAndPhrases.txt");
如果你从像这样的地方得到一份文件

var dir = Environment.SpecialFolder.ProgramFilesX86;
var path = Path.Combine(dir.ToString(), "file.txt");
然后

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

c:\programfiles(86)\file.txt

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

在Visual Studio中的
关键字和短语.txt
文件的属性中,您可能将“复制到输出目录”设置为“始终复制”或“如果更新,则复制”,这意味着它将被复制到与可执行文件相同的文件夹中。否则,该文件可能已被其他过程复制到该位置(例如,手动、生成后步骤批处理文件)。这就是为什么它在
K:\HeadlineAutoTrader\AutotraderTests\bin\Debug
下找到文件,而不是
K:\HeadlineAutoTrader\Autotrader.Infrastructure.HeadlineFeeds

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


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

GetExecutionGassembly()?使用一个嵌入的文本文件你不能-库来自的源路径不会保存在任何地方。。。澄清你能接受什么将有助于回答这个问题。@MitchWheat-它将为你提供执行程序集的文件夹的路径,而不是生成程序集的路径。是的。我知道。这就是我建议的原因。@AlexeiLevenkov那么出于测试目的,在单元测试项目中保留这些文件的副本?Ty,因为我试图在单元测试中访问这些文件,所以在那里保存这些文本文件的副本会更容易,因为它们将只在生产环境中用于自己的执行程序集中。并且属性设置为“不复制”@dinotom更新了答案,以包括文件存在的其他可能原因。唯一真正的解决方案,因为这是在单元测试中,所以在测试项目中也有文本文件
c:\programfiles(86)\file.txt