Включение режима с учетом регистра для папок в Windows 10
Как вы, возможно, уже знаете, файловая система 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: чувствительность к регистру для каждого каталога. Эта возможность была добавлена, чтобы дать пользователю лучшую совместимость при использовании файлов с учетом регистра. Также вы можете использовать его с обычными приложениями 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 файл setCaseSensitiveInfo "полный путь к вашей папке" включить
Замените часть пути на правильный путь, соответствующий вашему компьютеру.
Например,Файл fsutil.exe setCaseSensitiveInfo "C: \ data \ Winaero \ Linux" включить
- Вы сделали.
Теперь вы можете создать два файла с одинаковым именем и только с разницей в регистре. Windows 10 правильно обработает их в этой конкретной папке.
Чтобы увидеть статус функции для папки, выполните команду
fsutil.exe file queryCaseSensitiveInfo "полный путь к вашей папке"
Например,
fsutil.exe файл queryCaseSensitiveInfo "C: \ data \ Winaero \ Linux"
Вы увидите что-то вроде этого:
Наконец-то, для отключения режима чувствительности к регистру для папок, выполните следующую команду в командной строке, открытой от имени администратора:
Файл fsutil.exe setCaseSensitiveInfo "C: \ data \ Winaero \ Linux" отключить
Используйте правильный путь к папке, и все готово.
Примечание: Отключение атрибута CaseSensitiveInfo для непустых папок не поддерживается. Перед отключением папки необходимо удалить все файлы.
Вот и все.