2009-07-31 71 views
0

我想知道用戶提供的文件名1與存儲在數據庫(文件名2)中相同。本地化 - 如何檢查文件名1和文件名2是否相同

我正要使用

string.Equals(Filename1, Filename2, StringComparison.CurrentCultureIgnoreCase) 

但後來我懷疑我是否應該使用StringComparison.InvariantCultureIgnoreCase

顯然,我需要按照操作系統所做的相同的方式來執行此操作,或者使用適當的API。

在一些文化中,如果下一個字母大寫,AFAIK字符(例如vocals)可能會改變。

由於我主要面向英語市場,因此我希望我的軟件能夠在全球範圍內運行良好。

回答

0

如果文件是實際存在的光盤(我假設),你可以使用Directory.GetFiles()規範化的文件名,然後比較規範的文件名:

string fileName1 = @"C:\someFolder/sOmeFiLE.txt"; 
string fileName2 = @"C:\somefolder\someFile.txt"; 

string canonicalFileName1 = Directory.GetFiles(
     Path.GetDirectoryName(fileName1), 
     Path.GetFileName(fileName1))[0]; 

string canonicalFileName2 = Directory.GetFiles(
     Path.GetDirectoryName(fileName2), 
     Path.GetFileName(fileName2))[0]; 

bool isEqual = string.Compare(canonicalFileName1, canonicalFileName2) == 0; 
1

是的,你應該使用不變的文化。我可能會這樣做,沒有區分大小寫,因爲我確信這不會影響不變的文化(否則它不會很好)。

如果您考慮(我不知道這是否屬實),您的數據庫是使用不同的文化在不同的機器上生成的,而不使用不變的比較會導致您的問題。

如果你不忽略這種情況,那麼如果我把'Windows'文件夾重命名爲'windows',你會說我的文件不存在了,當然他們確實存在。