簡體   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