C# нечувствительность к регистру сравнения строк пути к файлу
Я хотел бы сравнить две строки, содержащие пути к файлам в C#.
Однако, поскольку в ntfs по умолчанию используются пути без учета регистра, я бы хотел, чтобы сравнение строк выполнялось без учета регистра аналогичным образом.
Однако я не могу найти никакой информации о том, как ntfs фактически реализует свою нечувствительность к регистру. Я хотел бы знать, как выполнить сравнение строк без учета регистра, используя те же правила размещения, которые ntfs использует для путей к файлам.
4 ответа
Из MSDN:
Строковое поведение файловой системы, разделов и значений реестра и переменных среды лучше всего представлено как
StringComparison.OrdinalIgnoreCase
,
А также:
При интерпретации имен файлов, файлов cookie или чего-либо еще, где может появляться такая комбинация, как "å", порядковые сравнения по-прежнему предлагают наиболее прозрачное и подходящее поведение.
Поэтому это просто:
String.Equals(fileNameA, fileNameB, StringComparison.OrdinalIgnoreCase)
(Я всегда использую статический Equals
вызов в случае, если левый операнд null
)
При сравнении путей направление разделителя пути также очень важно. Например:
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 делает бесполезное распределение памяти каждый раз, когда вы сравниваете что-то