Локализация - как проверить, что Filename1 и Filename2 совпадают - PullRequest
0 голосов
/ 31 июля 2009

Я хочу знать, что Имя файла1, предоставленное пользователем, совпадает с сохраненным в БД (Имя файла2).

Я собирался использовать

string.Equals(Filename1, Filename2, StringComparison.CurrentCultureIgnoreCase)

но потом я сомневался, стоит ли мне использовать StringComparison.InvariantCultureIgnoreCase.

Очевидно, мне нужно сделать то же самое, что и ОС, или использовать соответствующий API.

В некоторых культурах AFAIK символы (например, вокал) могут измениться, если следующий из них будет написан заглавными буквами.

Поскольку я в первую очередь ориентируюсь на англоязычный рынок, я бы хотел, чтобы мое программное обеспечение работало по всему миру.

Ответы [ 3 ]

1 голос
/ 31 июля 2009

Да, вы должны использовать инвариантную культуру. Я бы, наверное, сделал это без учета регистра, так как уверен, что это не повлияет на инвариантную культуру (иначе это было бы не очень хорошо).

Если вы считаете (я не знаю, правда ли это), что ваша база данных была создана на другом компьютере с использованием другой культуры, то не использование инвариантного сравнения может вызвать проблемы.

Если вы не игнорируете дело, тогда, если я переименую мою папку «Windows» в «windows», вы скажете, что мои файлы внутри их больше не существуют, когда, очевидно, они существуют.

1 голос
/ 03 апреля 2010

Цитировать Майкл Каплан :

Если вы пытаетесь сравнить символические идентификаторы или объекты операционной системы, такие как имена файлов или именованные каналы, используйте метод типа Ordinal (или метод типа OrdinalIgnoreCase).

Другими словами, используйте StringComparison.OrdinalIgnoreCase в качестве аргумента string.Equals для имитации файловой системы Windows.

0 голосов
/ 31 июля 2009

Если файлы на самом деле существуют на диске (что я предполагаю), вы можете канонизировать имя файла, используя 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...