2009-07-31 89 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',你会说我的文件不存在了,当然他们确实存在。

相关问题