我知道 Windows 操作系统(通常)不区分大小写。所有 Windows 操作系统(从 Windows 95 到 Windows 7)都是这样吗?是否有任何注册表设置可以使 Windows 区分大小写?
在Linux下,你可以有文件example.JPG,并example.jpg在同一目录下。
在 Windows 中,您有区分大小写的扩展名,但不能将这两个文件放在同一目录中。为什么不?
我工作的一位程序员,他一生都在使用 Linux,他指责 Windows 有一个不区分大小写的文件系统(除其他外),他说这是最糟糕的想法,永远不会有好处。我说那只是因为他习惯了区分大小写的文件系统,而且拥有一个不区分大小写的文件系统更有意义(我的部分原因是我的名字是David,但如果你提到我,david我会仍然知道您的意思是我,这同样适用于文件)。然后他解释了他的立场,指出不区分大小写的文件系统必须导致性能下降。
所以现在我想知道......不区分大小写的文件系统如何访问文件?让我试着解释一下我的想法:
假设您有一个区分大小写的文件系统(和操作系统内核等),实际上,如果存在一个名为 的目录exampleDir,我必须准确键入cd exampleDircd 到其中。如果我输入cd exampledir,我应该收到一个错误,该目录不存在。在我看来,这似乎是一个简单的案例。当我输入命令时,文件系统可以简单地获取我输入的确切字符(忽略内核可能会做什么以将当前工作目录路径添加到字符串等)并开始运行可用文件名列表,执行直接比较每个名字;例如:
for(var i = 0; i < files.length; i++) {
if(filename == files[i]) return true;
}
Run Code Online (Sandbox Code Playgroud)
现在是有趣的部分,不区分大小写的文件系统(假设保留大小写,根据 Windows)。实际上,如果存在一个名为 的目录exampleDir,我可以输入cd exampleDir或cd eXamPleDIr并且我仍然可以成功进入该文件夹。我真正想知道的是,实现这一目标的代码是什么样的。为了保留大小写,目录名称必须与其大小写一起存储。那么这是否意味着每次要通过文件名访问文件时都必须进行两次大小写转换?这会转化为多少性能影响?是否有任何技巧可以减少使用不区分大小写的文件系统导致的性能下降?这就是我想象的文件系统代码必须看起来的样子:
for(var i = 0; i < files.length; i++) {
if(toLowercase(filename) == toLowercase(files[i])) return true;
}
Run Code Online (Sandbox Code Playgroud)
请注意:由于我的问题似乎并不清楚,我绝对不是在问哪种类型更好,也不是在问优点和缺点是什么。我只是问(在技术方面)不区分大小写的文件系统如何处理人类可以使用随机大小写键入文件名的事实。
我不在乎它到底是哪个文件系统,我只需要文件路径以区分大小写的方式工作。
也许是一种类似于 Linux 机器上的 samba 共享的行为,它启用了区分大小写。那将是完美的,除了我需要将磁盘存储在本地。
是否有任何驱动程序/工具?
我已经尝试了几个用于 Windows 的 ext2 驱动程序,但它们不能用于此目的:((http://www.fs-driver.org/和http://www.fs-driver.org/)
Bash-on-Ubuntu-on-Windows 支持区分大小写的文件路径。这意味着我可以创建两个名称仅大小写不同的文件或目录。但是,我在访问这些文件时遇到问题。
跑步
bash -c "touch Magic ; mkdir magic ; echo Secret! > magic/secret"
Run Code Online (Sandbox Code Playgroud)
在该目录中创建一个文件名Magic、一个名为的目录magic和一个文件名secret。
bash -c "ls -lR" 产量
.:
total 0
drwxrwxrwx 2 root root 0 Aug 23 10:37 magic
-rwxrwxrwx 1 root root 0 Aug 23 10:37 Magic
./magic:
total 0
-rwxrwxrwx 1 root root 8 Aug 23 10:37 secret
Run Code Online (Sandbox Code Playgroud)
(我不确定为什么会得到root,因为它不是默认用户,但这似乎与我的问题无关。)
现在,虽然bash可以轻松访问magic/secret目录中的文件,但 Windows 似乎将目录和文件视为一回事。所以双击目录我得到一个“目录名无效”的错误

使用 也是如此cd,因为我被The directory name is …
bash windows-explorer filesystems windows-10 windows-subsystem-for-linux
windows ×4
filesystems ×3
windows-subsystem-for-linux ×2
bash ×1
case ×1
linux ×1
unix ×1
windows-10 ×1
windows-7 ×1