c#文件路径字符串比较不区分大小写

本文关键字:不区 大小写 比较 字符串 文件 路径 | 更新日期: 2023-09-27 18:25:55

我想比较两个包含c#中文件路径的字符串。

然而,由于在ntfs中,默认情况下使用不区分大小写的路径,我希望字符串比较也以同样的方式不区分大小字母。

然而,我似乎找不到任何关于ntfs如何实际实现其不区分大小写的信息。我想知道的是,如何使用与ntfs用于文件路径相同的大小写规则来执行字符串的不区分大小写的比较。

c#文件路径字符串比较不区分大小写

来自MSDN:

文件系统、注册表项和值以及环境变量的字符串行为最好用StringComparison.OrdinalIgnoreCase表示。

和:

在解释文件名、cookie或任何其他可能出现"å"等组合的情况时,顺序比较仍然提供了最透明、最合适的行为。

因此,它很简单:

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

(如果左操作数是null,我总是使用静态Equals调用)

在比较路径时,路径的分隔符方向也非常重要。例如:

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

isEqual将是false

因此需要首先修复路径:

 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);
string path1 = "C:''TEST";
string path2 = "c:''test";
if(path1.ToLower() == path2.ToLower())
    MessageBox.Show("True");

你是这个意思,还是我不明白这个问题?

我会选择

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

或者如果您想指定区域性:

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

每次比较

时,使用ToUpper都会进行无用的内存分配