2016-07-07 108 views
1

假我要處理的文件路徑類似File.Exists返回URL類型文件路徑

file:///My%20HD/files/06.%20test%20Lastname%20-%20test.mp3 

該文件確實存在,我可以訪問它。

但System.IO.File.Exist()返回false。

我猜問題是文件路徑格式。我該如何處理它?

+0

您是否進行Url解碼? – Youngjae

+2

這不是一個uri,「我的%20HD」應該是一個盤符。 –

+1

你爲什麼期望'File.Exists'與URL一起工作?你不應該問'如何將文件URL轉換爲文件路徑? –

回答

1

使用Uri.LocalPath將文件URL轉換爲實際的文件路徑,例如:

Uri uriAddress2 = new Uri(@"file:///h:/test.html"); 
Console.WriteLine(uriAddress2.LocalPath); 
Console.WriteLine(File.Exists(uriAddress2.LocalPath)); 

的文件URL是不是一個有效的文件路徑,本地或UNC。 File.Exists只檢查文件路徑是否實際上對應於真實文件。

事實上,作爲Caramiriel的評論指出,已存在結束調用NormalizePath其中明確拒絕的URI,因爲很多的Win32 API無法處理它們

File.Exits的單聲道版本,就像.NET,checks爲特定路徑檢索文件屬性。 GetFileAttributes是一個外部調用,可能最終調用等效的Win32 API函數,因此文件URL將不起作用

+0

正如我在評論中提到的那樣,這是一個奇怪的問題。 。1.我在我的mac上使用文件的第三方應用程序中創建一個文件2.我從應用程序保存3.我嘗試解析單聲道應用程序中的文件現在我得到UNC但不能File.Exists()它在同一臺機器上? – dknaack