2010-12-06 45 views
1

如何將驅動器相對路徑(如D:test.xml)轉換爲函數(如XDocument.Load())的絕對路徑將接受。例如,D驅動器可以將D:\ data作爲其當前工作目錄,因此D:test.xml將表示D:\ data \ test.xml。我已經嘗試了D:。\ test.xml這樣的混合體。將包含驅動器號的相對路徑轉換爲.NET文件函數的絕對路徑

這是我得到的東西,像d錯誤:的test.xml無效的URI:一個DOS路徑必須紮根,例如, 'C:\'

回答

4

你可以使用GetFullPath。例如:

// should return "D:\data\test.xml" if the current working dir is "D:\data" 
string absolutePath = Path.GetFullPath("D:test.xml"); 
+0

如果CWD是「D:\ Data」,則Path.GetFullPath(「D:test.xml」)確實會返回「D:\ data \ test.xml」,因爲它會直接獲得完整路徑爲「test.xml」。但是,如果使用與用於CWD的驅動器號不同的驅動器號,結果將不一致。例如,Path.GetFullPath(「C:test.xml」)將返回「C:\ test.xml」。你知道爲什麼GetFullPath會以這種方式工作嗎?是通過設計還是意外? – 2010-12-06 22:03:44

+0

@弗洛林:這是設計。看看http://msdn.microsoft.com/en-us/library/aa365247.aspx#fully_qualified_vs._relative_paths。最近Raymond Chen的一篇文章解釋了這些看似奇怪的設計決定背後的一些歷史:http://blogs.msdn.com/b/oldnewthing/archive/2010/10/11/10073890.aspx – LukeH 2010-12-07 10:02:14

2

您應該簡單地使用「test.xml」作爲相對路徑,並且如果當前文件夾是「D:\ data」,則完整路徑將被解析爲「D:\ Data \ test.xml」。這也在Load()方法的MSDN示例中說明:http://msdn.microsoft.com/en-us/library/bb343181.aspx

請注意「driveLetter:fileName」不是.Net中的相對路徑。 (請閱讀更新)

可以使用Path.GetFullPath()轉換相對路徑到一個完整的路徑,但你沒有這樣做XDocument.Load(),因爲它也將接受相對路徑。

更新 LukeH,感謝您指出了這一點! 「driveLetter:fileName」由Path.GetFullPath()接受,並按照指定的here指定爲指定驅動器當前目錄的相對路徑。

驅動器級別當前目錄的概念是從DOS舊時代繼承而來的。不一定是我將構建現代應用程序的功能。

相關問題