4

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

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

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

4

4 回答 4

7

来自MSDN

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

和:

在解释文件名、cookie 或任何其他可能出现“å”之类的组合时,序数比较仍然提供最透明和最合适的行为。

因此它很简单:

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

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

于 2014-10-07T07:47:31.890 回答
1

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

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

isEqualfalse

因此需要先修复路径:

 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);
于 2016-08-23T13:05:18.913 回答
0
string path1 = "C:\\TEST";
string path2 = "c:\\test";

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

你的意思是这个还是我没有得到这个问题?

于 2014-10-07T07:48:07.283 回答
0

我会去

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

或者如果你想指定文化:

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

每次比较某些东西时,使用 ToUpper 都会分配无用的内存

于 2014-10-07T07:52:44.037 回答