[英]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.