Как вы, возможно, уже знаете, файловая система Windows NTFS рассматривает имена файлов и папок как нечувствительные к регистру. Например, для ОС и приложений MyFile.txt и myfile.txt – это один и тот же файл. Однако в Linux все иначе. Для этой ОС это два разных файла. Это различие в поведении может создать проблемы для пользователей WSL. Для их решения в Windows 10 предусмотрена возможность включения режима чувствительности к регистру для папок.
Если вы использовали Windows Подсистема для Linux, вы, вероятно, знаете, что она позволяет обрабатывать ваши файловые системы Windows (смонтированные в/mnt/c,/mnt/d и т. Д.) Как чувствительные к регистру. Это означает, среди прочего, что вы можете создавать файлы, имена которых отличаются только регистром (например, foo.txt и FOO.TXT).
Однако использовать эти файлы в Windows было невозможно. Поскольку приложения Windows обрабатывают файловую систему как нечувствительную к регистру, они не могут различать файлы, имена которых отличаются только регистром. Хотя проводник будет отображать оба файла, только один будет открыт независимо от того, какой из них вы щелкнули.
Начиная с Windows Insider build 17093, появился новый способ обработки файлов с учетом регистра в Windows: -directory чувствительность к регистру. Эта возможность была добавлена, чтобы дать пользователю лучшую совместимость при использовании файлов с учетом регистра. Также вы можете использовать его с обычными приложениями Windows. Начиная с Windows 10 Build 17110, это поведение используется по умолчанию.
Подробнее
Чувствительность к регистру в Windows
Семейство Windows NT операционных систем (включая Windows 10) всегда имела возможность выполнять операции файловой системы с учетом регистра. Приложения могут передавать флаг FILE_FLAG_POSIX_SEMANTICS
в CreateFile
API, чтобы указать, что они хотят, чтобы путь обрабатывался с учетом регистра. Однако по соображениям совместимости существует глобальный раздел реестра, который отменяет это поведение; когда этот ключ установлен, все файловые операции нечувствительны к регистру, даже если установлен флаг FILE_FLAG_POSIX_SEMANTICS
. Начиная с Windows XP, это используется по умолчанию.
Подсистема Windows для Linux использует другой механизм, который сам обходит этот ключ реестра, позволяя нам выполнять операции файловой системы с учетом регистра. Это то, что позволяет приложениям Linux, работающим в WSL, использовать имена файлов, которые различаются только регистром, так же, как они могут в реальном Linux, даже с этим глобальным ключом реестра.
К сожалению, это оставляет вас с файлы, недоступные для приложений Windows. Хотя вы можете изменить глобальный раздел реестра, это все равно будет работать только для тех приложений, которые используют FILE_FLAG_POSIX_SEMANTICS
, и это изменит поведение всех файлов на всех дисках, что может быть не предназначено и может нарушать работу некоторых приложений.
Чувствительность к регистру для каждого каталога
Чтобы решить эту проблему, Microsoft добавила новый флаг, чувствительный к регистру, который можно применить к каталогам. Для каталогов, для которых установлен этот флаг, все операции с файлами в этом каталоге чувствительны к регистру, независимо от того, был ли указан FILE_FLAG_POSIX_SEMANTICS
. Это означает, что если у вас есть два файла, которые отличаются только регистром в каталоге, отмеченном как чувствительный к регистру, все приложения смогут получить к ним доступ.
Включить режим с учетом регистра для папок
Чтобы включить или отключить эту функцию, вы должны использовать встроенное приложение fsutil.exe.
Чтобы включить режим с учетом регистра для папок , выполните следующее.
- Откройте командную строку с повышенными привилегиями.
- Введите следующую команду:
fsutil.exe file setCaseSensitiveInfo "полный путь в вашу папку "enable
Замените часть пути на правильный путь, соответствующий вашему компьютеру.
Например,fsutil.exe file setCaseSensitiveInfo" C : data Winaero Linux "enable
- Готово.
Теперь вы можете создать два файла с одинаковыми именами и только с разницей в регистре. Windows 10 правильно обработает их в этой конкретной папке.
Чтобы увидеть статус функции для папки, запустите команду
fsutil.exe file queryCaseSensitiveInfo “полный путь к вашей папке”
Например,
fsutil.exe file queryCaseSensitiveInfo «C: data Winaero Linux»
Вы увидите что-то вроде этого:
Наконец, , чтобы отключить режим с учетом регистра для папок , выполните следующую команду в командной строке, открытой от имени администратора:
fsutil.exe файл setCaseSensitiveInfo "C: data Winaero Linux" disable
Используйте правильный путь к папке, и все готово.
Примечание: Отключение атрибута CaseSensitiveInfo для непустых папок не поддерживается. Перед отключением папки необходимо удалить все файлы.