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

时间:2014-10-07 07:41:57

标签: c# string ntfs case-insensitive casing

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

但是,因为在ntfs中默认使用不区分大小写的路径,所以我希望字符串比较以相同的方式不区分大小写。

但是我似乎无法找到有关ntfs如何实际实现其不区分大小写的任何信息。我想知道的是如何使用ntfs用于文件路径的相同大小写规则对字符串进行不区分大小写的比较。

4 个答案:

答案 0 :(得分:7)

来自MSDN

  

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

  

在解释文件名,Cookie或其他可能出现“å”等组合的地方时,序数比较仍然提供最透明和最合适的行为。

因此它很简单:

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

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

答案 1 :(得分:0)

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

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

你是说这个还是我没有得到这个问题?

答案 2 :(得分:0)

我会去

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

或者如果您想指定文化:

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

使用ToUpper每次比较时都会进行无用的内存分配

答案 3 :(得分:0)

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

 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);