.NET, Как сравнить две Строки, которые представляют имена файлов, игнорирующие регистр правильно

Добро пожаловать задавать тот же вопрос на группа Google. Вы найдете больше чем 500 пользователей там, и некоторые из них являются строительными проектами строительных компаний для их клиентов.

Мое впечатление - то, что большинство из них использует postgresql (это - то, что я делаю к), и некоторые другие используют Google App Engine. На самом деле web2py является единственной платформой, которая позволяет Вам писать код однажды, и тот же код будет работать на GAE, SQLite, MySQL, PostgreSQL, Oracle, MSSQL и FireBird (с ограничениями, наложенными GAE).

можно найти Красноватый (reddit клон) устройством с исходным кодом для GAE здесь

Здесь , можно найти ссылки на некоторое производственное приложение. Некоторые работают на GAE.

@Armin:

Ничто не неправильно с Django или Опорами. Они - превосходные платформы. Я использовал их прежде, чем разработать web2py. Существует несколько вещей, которые можно сделать с web2py, что Вы не можете с ними. Например:

  • web2py делает распределенные транзакции с Postgresql, Armin запросил эту функцию.
  • Django ORM не делает миграций исходно (см. Юг ), web2py делает.
  • Django ORM не позволяет частичные суммы (количество (поле)), и группа, web2py делает.
  • web2py может соединиться с несколькими базами данных сразу, Django и забастовка>, Опоры должны быть взломаны, чтобы сделать это, и
  • , web2py имеет конфигурационный файл в приложении, не на уровне проекта, как они.
  • webp2y регистрирует всю tracebacks сторону сервера для администратора, Django и Опоры не делают.
  • web2py программы, на которых часто работают неизмененный GAE.
  • web2py имеет встроенные xmlrpc веб-сервисы.
  • web2py идет с jQuery.

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

только необходимо изучить Python и 81 новую функцию/класс (50 из которых имеют те же имена и атрибуты, как соответствующие HTML-тэги, BR, DIV, SPAN, и т.д. и 19 являются блоками проверки допустимости, IS_IN_SET, IS_INT_IN_RANGE, и т.д.).

Так или иначе, самая важная проблема - то, что web2py легче, чем Django, Опоры, PHP и направляющие.

Вы также заметите, что web2py размещается и на Google Code и Launchpad и нет открытых билетов. Все прошлые вопросы были решены меньше чем за 24 часа.

можно также проверить список рассылки Google, что все потоки (10 056 сообщений сегодня) закончились с ответом от меня или одного из других разработчиков в течение 24 часов.

можно найти книгу по web2py на Amazon.

Armin, я знаю, что Вы - разработчик Джинджи. Я люблю Джинджу, но имею различные принципы проектирования. И Django и Джинджа определяют их собственные шаблонные языки (и Джинджа в особенности имеет превосходную документацию), но я действительно предпочитаю использовать чистый Python в шаблонах так, чтобы мои пользователи не делали никакой потребности выучить шаблонный язык вообще. Я хорошо знаю о за и против каждого подхода. Позвольте нам, пользователи решают то, что они предпочитают. Никакая потребность подвергнуть критике друг друга.

@Andre: db.table.field относится к объекту поля. 'table.field' является именем поля. Можно всегда передавать объект поля, когда имя поля требуется, потому что str (db.table.field) является 'table.field'. Единственный случай Вы обязаны использовать строку вместо объекта, - когда необходимо сослаться по имени на поле, которое не было уже определено..., возможно, мы должны переместить это обсуждение в надлежащее место.;-)

я надеюсь, что Вы решите дать web2py попытку и, нравится ли Вам это или нет, я хотел бы услышать Ваше мнение.

17
задан Winston Smith 18 November 2009 в 15:22
поделиться

5 ответов

Marcus,

You might want to at look at the answer for another StackOverflow question, which is very similar: Win32 File Name Comparison , which in turn mentions http://www.siao2.com/2005/10/17/481600.aspx .

Following a link in another answer to the same question and digging further, I came across the following MSDN article http://msdn.microsoft.com/en-us/library/ms973919.aspx . It is worth a read in general, but when it comes to file name comparison it recommends using StringComparison.OrdinalIgnoreCase. See Table 1 in the article, which contains file paths as one of the data types handled or the following the quote:

So, when interpreting file names, cookies, or anything else where something like the å combination can appear, ordinal comparisons still offer the most transparent and fitting behavior.

Hopes this helps, Boaz

2
ответ дан 30 November 2019 в 12:27
поделиться

Может, вам стоит попробовать следующее: http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx

0
ответ дан 30 November 2019 в 12:27
поделиться

Вы должны использовать StringComparison.OrdinalIgnoreCase в соответствии с Рекомендации по использованию строк в .NET Framework .

Строковое поведение файловой системы, ключей и значений реестра, а также переменных среды лучше всего представлено StringComparison.OrdinalIgnoreCase.

Если вы используете культуру для сопоставления строк, вы можете получить ситуация, в которой, например, имена "häl.gif" и "hal.gif" будут считаться совпадающими.

а переменные среды лучше всего представлены StringComparison.OrdinalIgnoreCase.

Если вы используете язык и региональные параметры для сопоставления строк, вы можете попасть в ситуацию, в которой, например, имена «häl.gif» и «hal.gif» будут считаться совпадение.

а переменные среды лучше всего представлены StringComparison.OrdinalIgnoreCase.

Если вы используете язык и региональные параметры для сопоставления строк, вы можете попасть в ситуацию, в которой, например, имена «häl.gif» и «hal.gif» будут считаться совпадение.

27
ответ дан 30 November 2019 в 12:27
поделиться

Это невозможно сделать надежно.

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

Но таблица преобразования регистра хранится в самой файловой системе (для NTFS), и он меняется от версии к версии (например, таблица преобразования регистра Vista была переведена на уровень Unicode 5, поэтому Vista NTFS и XP NTFS имеют разные правила преобразования регистра).

И важно то, что ОС, которая форматировала файловую систему, а не текущая ОС.

Тогда вы можете столкнуться со всевозможными проблемами с другими файловыми системами (Mac OS выполняет некоторую нормализацию Unicode (не стандартную)), Linux ничего не делает , но Samba (реализующая протокол обмена файлами Windows) делает. И имеет другие таблицы, кроме Windows.

Так что же произойдет, если я сопоставлю букву сетевому диску, совместно используемому Linux или Mac OS?

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

2
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: