2013-02-20 13 views
0

我剛剛在我的應用程序中發現了一個錯誤,其中Path.GetFullPath()未返回,確切地說對於同一路徑的不同表示具有相同的結果。在這種情況下,../include../include/分別返回c:\\...\\include & c:\\...\\include\\;因爲我維護一個Dictionary<string,...>的dir名稱,這打破了一些東西。如何確保我可以在.NET中唯一標識一個目錄路徑

如何解決這個問題,理想情況下不需要對字符串進行嚴格的檢查,而是使用框架方法?

+1

你需要最後一個@「\」嗎? – 2013-02-20 13:21:41

+0

如果我需要它,這並不重要,這是來自可以包含任一版本的外部來源的輸入數據。 – 2013-02-20 13:22:24

+0

你能做一個修正('\\')嗎? – 2013-02-20 13:22:56

回答

4

../include可能指向目錄文件(文件不必有一個擴展名),並且始終../include/是因爲結尾的斜線的目錄。所以他們絕對不一樣。

如果您確保輸入始終是目錄(其中Path.GetFullPath()不能肯定的),你可以這樣做:

path = Path.Combine(input, Path.DirectorySeparatorChar.ToString()); 

這樣,所有的輸入將被視爲目錄,而不是文件,和Path.GetFullPath()將返回相同的兩個變種。

+0

在_this_上下文中,他們_are_相同...外部文件有一個額外的dirs列表,所以如果有人輸入文件名,數據首先是不好的。我已經明確檢查路徑是一個有效的目錄。 – 2013-02-20 13:46:20

+0

是的,你知道,但是Path.GetFullPath()沒有,因爲這是一個字符串操作,而不是文件系統操作。只要讓所有路徑都以斜線結束,然後稍微幫助一下。 – CodeCaster 2013-02-20 13:50:40

+0

或者對不起,我明白你的意思。嚴格來說,不應該把'@「\」'做成適當的dir-separator常量嗎? – 2013-02-20 14:15:41

0

他們不應該返回相同的結果。如果您需要檢查路徑是否實際上是文件或目錄,則可以使用Path.GetFullPath("../include")如果沒有結尾斜槓。如果編程提供的路徑,然後做一個string.TrimEnd('\\'),然後檢查是否路徑是一個文件或使用目錄:

File.Exists()Directory.Exists(),以確定是否在指定的路徑是一個文件或目錄。

您需要確保所有的表插入和搜索都是通過插入/比較非尾隨斜線路徑來完成的。

0

做一個.TrimEnd('\')如果它是可信的。

相關問題