我并不关心它具体是哪个文件系统,我只需要文件路径以区分大小写的方式工作。
也许是一种类似于 Linux 机器上启用了大小写区分的 Samba 共享的行为。那将是完美的,只是我需要将磁盘存储在本地。
有任何驱动程序/工具吗?
我已经尝试了几个适用于 Windows 的 ext2 驱动程序,但它们都无法达到这个目的 :( (http://www.fs-driver.org/和http://www.fs-driver.org/)
答案1
简单的答案是“不”。详细的答案是……
NTFS 确实以区分大小写的方式存储文件名(NTFS 可以在同一目录中拥有 README.txt 和 readme.txt),甚至 Windows 文件管理器也可以通过 NtOpenFile / NtCreateFile 系统调用在内部管理对文件名的区分大小写的请求。
不幸的是,Win32 函数 CreateFile(在任何地方使用,包括 fopen)将使用 OBJ_CASE_INSENSITIVE 标志在内部调用 NtCreateFile,这意味着所有使用 CreateFile 的应用程序都将以不区分大小写的方式看到您的区分大小写的文件系统。实际上,这意味着所有应用程序都将以不区分大小写的方式看到您的文件系统,无论您的文件系统实际上是否区分大小写。
我能想到的唯一强制区分大小写的方法是编写一个过滤驱动程序,它将从传入的系统调用请求中删除 OBJ_CASE_INSENSITIVE 标志,然后允许 NTFS、EXT2 或任何内部文件系统以其默认的区分大小写的方式运行。
答案2
从 Windows 内部来看,这是可能的,但您必须能够编写 C。
NTFS 实际上存储名称时区分大小写(以支持 POSIX 子系统)。但是,NTFS 本身实际上并不支持区分大小写的功能。考虑到 NT 最初是作为 UNIX 的直接竞争对手编写的,这并不奇怪。
答案3
看起来唯一的方法是安装虚拟化 Linux 并将 VM 的驱动器共享给 Windows。
我一直在互联网上寻找相同的解决方案,主要是从 Linux 系统中检出 GIT 存储库,其中的文件仅在大小写上有所不同(不要解释它们为什么在那里——这超出了我的控制范围)。但看起来除了编写自己的子系统或深入集成到 Interix(现在是 Unix 服务)子系统之外,没有相对简单的方法可以做到这一点。