Пути к файлам в среде Windows не чувствительны к регистру? - PullRequest
33 голосов
/ 26 августа 2011

Безопасно ли предполагать, что локальные и сетевые пути к файлам Windows НЕ чувствительны к регистру?

Ответы [ 2 ]

30 голосов
/ 26 августа 2011

Да. Windows (локальные) файловые системы, включая NTFS, а также FAT и варианты, нечувствительны к регистру (обычно). Базовая реализация сетевой файловой системы может быть чувствительной к регистру, однако большинство программ, которые позволяют Windows получать к ней доступ (например, SMB ), автоматически делают чувствительные к регистру файловые системы нечувствительными к регистру Windows.

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

29 голосов
/ 26 августа 2011

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

В Windows все файлы в конечном итоге открываются с помощью API CreateFile - если в вызов передается флаг FILE_FLAG_POSIX_SEMANTICS (а доступ к файловой системе изначально зависит от регистра), тогда файл будет открыт на основе точного совпадения имени. Если FILE_FLAG_POSIX_SEMANTICS не передается, то файловая система открывает файл без учета регистра и открывает один из файлов с соответствующим именем. Если их больше одного, то не определено, какой из них действительно открыт.

Большинство реализаций C и C ++ во время выполнения в Windows не предоставляют никакого доступа к этому механизму и никогда не используют этот флаг, поэтому единственный способ получить доступ к чувствительным к регистру поведениям - это напрямую использовать Windows API.

tl; dr - ваша языковая среда выполнения, вероятно, выставляет вашу файловую систему без учета регистра или с учетом регистра. Если вы используете Windows API напрямую, вы можете получить доступ к поддерживаемым файловым системам с учетом регистра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...