Мне все равно, какая именно файловая система это будет, мне просто нужно, чтобы пути к файлам работали с учетом регистра.
Может быть, поведение похоже на общий ресурс samba на Linux-компьютере, в котором включена чувствительность к регистру. Это было бы идеально, за исключением того, что мне нужно, чтобы диск хранился локально.
Есть ли какие-нибудь драйверы/инструменты для этого?
Я уже попробовал пару драйверов ext2 для Windows, но они не подошли для этой цели :( (http://www.fs-driver.org/иhttp://www.fs-driver.org/)
решение1
Простой ответ — нет. Длинный ответ —...
NTFS хранит имена файлов с учетом регистра (NTFS может хранить файлы README.txt и readme.txt в одном каталоге), и даже файловый менеджер Windows может внутренне управлять запросами к именам файлов с учетом регистра через системные вызовы NtOpenFile / NtCreateFile.
К сожалению для вас, функция Win32 CreateFile (используемая везде, включая fopen) внутренне вызовет NtCreateFile с использованием флага OBJ_CASE_INSENSITIVE, что будет означать, что все приложения, использующие CreateFile, будут видеть вашу файловую систему, чувствительную к регистру, без учета регистра. На практике это означает, что все приложения будут видеть вашу файловую систему без учета регистра, независимо от того, чувствительна ли ваша файловая система на самом деле к регистру.
Единственный способ, который, как мне кажется, практически принудительно обеспечить чувствительность к регистру, — это написать драйвер-фильтр, который удалит флаг OBJ_CASE_INSENSITIVE из входящих запросов системных вызовов, что затем позволит NTFS, EXT2 или любой другой внутренней файловой системе вести себя так, как принято у вас по умолчанию, с учетом регистра.
решение2
Изнутри Windows это возможно, но для этого нужно уметь писать на языке C.
NTFS на самом деле хранит имена с учетом регистра.(для поддержки подсистемы POSIX). Однако NTFS сама по себе не поддерживает функции, чувствительные к регистру. Учитывая, что NT изначально была написана как прямой конкурент UNIX, это неудивительно.
решение3
Похоже, единственный способ — установить виртуализированный Linux и предоставить общий доступ к диску виртуальной машины для Windows.
Я искал в Интернете то же самое решение, в первую очередь, чтобы извлечь репозиторий GIT из системы Linux, в которой есть файлы, отличающиеся только регистром (не проповедуйте, почему они там находятся — это вне моего контроля). Но, похоже, нет относительно простого способа сделать это, кроме как написать собственную подсистему или глубоко интегрироваться в подсистему Interix (теперь службы Unix).