我想知道用户提供的Filename1与存储在DB(Filename2)中的相同。
我准备使用
string.Equals(Filename1, Filename2, StringComparison.CurrentCultureIgnoreCase)
然后我怀疑是否应该使用StringComparison.InvariantCultureIgnoreCase
。
显然,我需要像操作系统一样,或使用适当的API。
在某些文化中,AFAIK,如果下一个字符大写,则字符(例如人声)可能会改变。
由于我主要针对讲英语的市场,我希望我的软件在全世界都能很好地运作。
答案 0 :(得分:1)
是的,你应该使用不变的文化。我可能会在没有区分大小写的情况下这样做,因为我确信它不会影响不变的文化(否则它不会很好)。
如果您考虑(我不知道这是否属实),您的数据库是在使用不同文化的其他计算机上制作的,而不是使用不变的比较会导致您遇到问题。
如果你不忽略这种情况,那么如果我将'Windows'文件夹重命名为'windows',你就会说我的文件不再存在了,显然它们确实存在。
答案 1 :(得分:1)
如果您尝试比较符号标识符或操作系统对象(如文件名或命名管道),请使用Ordinal类型方法(或OrdinalIgnoreCase类型方法)。
换句话说,使用StringComparison.OrdinalIgnoreCase
作为string.Equals
的参数来模仿Windows文件系统。
答案 2 :(得分: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;