繁体   English   中英

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

[英]Path.GetFullPath returning wrong path in C#

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

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

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

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

如果没有,它将返回;

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

由于我要测试的代码正在测试项目中运行,因此这在一定程度上是有意义的。

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

这是一个基于WPF的项目,显然,由于Server.MapPath的出色工作,在Web应用程序中将更加容易

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

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

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

因此,该方法的行为与所记录的一样。

如果要相对于主要可执行文件的路径,请看一下在.NET中获取执行exe路径的最佳方法是什么?

当您调用File.GetFullPath ,库将在当前目录中查找执行程序。 除非另有说明,否则这是可执行文件所在的文件夹。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM