2011-08-29 118 views
2

我想我缺少明顯的東西....創建一個文件URI在C#

我在一個新的項目在讀碼和所遇到的代碼等同於以下:

var filePath = @"C:\temp\tmp1234.tmp"; // Generally obtained from System.IO.* calls 
var uri = new Uri("file://" + filePath); 

我認爲這將等同於:

var filePath = @"C:\temp\tmp1234.tmp"; 
var uri = new Uri(filePath); 

(假設Uri類可以解析的文件路徑,演繹方案,做任何逃避需要做的)。

由於代碼似乎工作,這是如此頻繁,如此一貫地完成我假設原始開發人員有一個很好的理由使用"file://" + filePath成語。有人能夠告訴我這是什麼原因嗎?

謝謝!

回答

3

他們都產生完全相同的Uri對象,除了(很明顯)爲OriginalString

您可以在LINQPad看到:

var filePath = @"C:\temp\tmp1234.tmp"; // Generally obtained from System.IO.* calls 
new []{ 
    new Uri("file://" + filePath), 
    new Uri(filePath) 
}.Dump(); 

我猜想,原開發商並沒有意識到這一點。

+0

有趣。謝謝。 – Russ

+0

漂亮的工具。玩弄它,我發現如果filePath = @「C:\ temp \ temp12%34.tmp」有區別!使用「file://」似乎認爲它已經被URL編碼,所以LocalPath出來了(或者至少不是放在:C:\ temp \ temp124.tmp中)。 – Russ

1

實際上,添加「file://」會強制該方案,因此會跳過.NET調用「ParseSchemeCheckImplicitFile」方法的需要......所以...它的[可忽略]更快。

這個,它是明確的 - 我個人更喜歡。

編輯:其實,我應該說的是它跳過了很多代碼在該方法。