2014-10-07 176 views
4

我想比較兩個包含c#文件路徑的字符串。c#文件路徑字符串比較不區分大小寫

但是,由於在NTFS默認情況下是使用大小寫不敏感的路徑,所以我希望字符串比較以同樣的方式不區分大小寫。

但是,我似乎無法找到關於ntfs實際如何實現其不區分大小寫的任何信息。我想知道的是如何使用與ntfs用於文件路徑相同的外殼規則對字符串進行不區分大小寫的比較。

回答

7

MSDN

文件系統,註冊表項和值以及環境變量的字符串行爲是最好的StringComparison.OrdinalIgnoreCase表示。

和:

在解釋文件名,餅乾,或任何其他地方,如組合「A」可以出現,依次比較仍然提供了最透明的和恰當的行爲。

因此它只是:

String.Equals(fileNameA, fileNameB, StringComparison.OrdinalIgnoreCase) 

(我總是用靜態Equals通話的情況下,左操作null

+0

謝謝!這正是我所期待的。 – 2014-10-07 07:57:35

+0

我意識到這個問題,簡單地問如何以不區分大小寫的方式比較兩個文件名,但可以猜測這種比較的目的是試圖確定兩個文件名是否引用同一個對象。如果你正在尋找確定兩個文件名是否涉及同一個文件,這不會有訣竅。應該指出的是,鑑於連接,鏈接,網絡上的共享等的可能性,確定兩個文件名是否指向相同的文件對象是非常困難的。參見http://stackoverflow.com/a/39399232/ 1082063。 – 2016-10-12 03:27:23

0
string path1 = "C:\\TEST"; 
string path2 = "c:\\test"; 

if(path1.ToLower() == path2.ToLower()) 
    MessageBox.Show("True"); 

你的意思是這還是我沒有得到題?

+0

雖然這對英文字符確實很好,但我仍然不知道windows如何處理國際字符。這是我的問題。如果是這種情況,最好使用String.Compare(string,string,StringComparison),因爲它不會實例化兩個新字符串。我想確保字符串比較使用與ntfs相同的外殼規則。 – 2014-10-07 07:54:22

+0

嗯,我很確定tolower和strongcomparison都適用於任何文化,因爲如果小語種存在於這種語言中,他們會試圖將其置於小寫。複製粘貼一些外國的排版到字符串中,然後用這種方式測試 – Vajura 2014-10-07 08:41:25

+0

我知道它有效,但你誤解了這個問題。我已經知道如何做一個不區分大小寫的搜索。我問的是我應該使用哪些不區分大小寫規則。這個問題已經在上面回答了。 – 2014-10-07 08:43:38

0

我會去

string.Compare(path1, path2, true) == 0 

,或者如果要指定文化:使用ToUpper的沒有無用的內存分配你比較每次

string.Compare(path1, path2, true, CultureInfo.CurrentCulture) == 0 

東西

+1

我知道如何比較兩個字符串不區分大小寫。我想確定的是不區分大小寫使用與NTFS相同的外殼規則。 ntfs是否使用當前的文化? – 2014-10-07 07:55:20

0

雖然路徑比較路徑的分隔符方向也非常重要。例如:

bool isEqual = String.Equals("myFolder\myFile.xaml", "myFolder/myFile.xaml", StringComparison.OrdinalIgnoreCase); 

isEqualfalse

因此首先需要解決的路徑:

private string FixPath(string path) 
    { 
     return path.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) 
        .ToUpperInvariant(); 
    } 

而這種表達會true

bool isEqual = String.Equals(FixPath("myFolder\myFile.xaml"), FixPath("myFolder/myFile.xaml"), StringComparison.OrdinalIgnoreCase); 
相關問題