6

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

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

Есть ли драйверы / инструменты для этого?

Я уже попробовал пару драйверов ext2 для Windows, которые не работали для этой цели :( ( http://www.fs-driver.org/ и http://www.fs-driver.org/)

3 ответа3

4

Простой ответ - нет. Длинный ответ ...

NTFS хранит имена файлов с учетом регистра (NTFS может иметь README.txt и readme.txt в одном каталоге), и даже файловый менеджер Windows может внутренне управлять запросами с учетом регистра к именам файлов через системные вызовы NtOpenFile / NtCreateFile.

К сожалению для вас, функция Win32 CreateFile (используемая повсеместно, в том числе fopen) будет внутренне вызывать NtCreateFile, используя флаг OBJ_CASE_INSENSITIVE, который будет означать, что все приложения, которые используют CreateFile, будут видеть вашу файловую систему без учета регистра. На практике это означает, что все приложения будут видеть вашу файловую систему без учета регистра независимо от того, является ли ваша файловая система фактически чувствительной к регистру.

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

1

Это возможно изнутри Windows, но вы должны быть в состоянии написать C.

NTFS фактически хранит имена с учетом регистра (для поддержки подсистемы POSIX). Однако NTFS на самом деле не поддерживает чувствительные к регистру функции. Учитывая, что NT изначально был написан как прямой конкурент UNIX, это неудивительно.

http://support.microsoft.com/kb/100108

http://blogs.msdn.com/b/sfu/

http://www.netbsd.org/docs/pkgsrc/platforms.html#interix

0

Похоже, единственный способ - это установить виртуализированный Linux и предоставить общий доступ к диску виртуальной машины в Windows.

Я искал в Интернете то же самое решение, в первую очередь, для извлечения GIT-репозитория из системы Linux, в которой файлы различаются только по регистру (не проповедуйте, почему они там есть - это вне моего контроля). Но похоже, что не существует относительно простого способа сделать это, если не написать собственную подсистему или глубоко интегрировать ее в подсистему Interix (теперь это сервисы Unix).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .