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