繁体   English   中英

Windows API访问区分大小写的路径(Bash-on-Ubuntu-on-Windows)

[英]Windows API to access case-sensitive paths (Bash-on-Ubuntu-on-Windows)

Bash-on-Ubuntu-on-Windows支持区分大小写的文件路径。 这意味着我可以创建两个文件或目录,其名称只是大小写不同。 但是我在访问这些文件时遇到了问题。

运行

bash -c "touch Magic ; mkdir magic ; echo Secret! > magic/secret"

创建一个文件名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

(我不知道为什么我会获得root ,因为它不是默认用户,但这似乎与我的问题无关。)

Windows Explorer显示: Windows资源管理器显示文件和目录

现在,虽然bash可以轻松访问目录中的magic/secret文件,但Windows似乎将目录和文件视为同一个文件。 所以双击目录我得到“目录名无效”错误 dbl单击目录时出错

使用cd ,因为我得到了The directory name is invalid. 打印出来。

是否有任何API允许我访问这些区分大小写的路径或创建它们? 在访问现有文件时,常规Windows API似乎完全忽略了字符大小写。

区分大小写的路径可以在Windows上使用NTFS,但它需要一些额外的工作。

首先,必须在系统范围内启用区分大小写。 这是通过将HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\kernel\\ dword:ObCaseInsensitive注册表值设置为0 ,然后重新启动系统来完成的。 我在这里找到了这个部分。

启用区分大小写后,可以将CreateFile用于区分大小写的路径。 为此,您必须将FILE_FLAG_POSIX_SEMANTICS作为dwFlagsAndAttributes参数的一部分传递。 来自msdn

根据POSIX规则进行访问。 这包括允许具有名称的多个文件(仅在大小写上有所不同)用于支持该命名的文件系统。

我在这个答案中找到了这一部分。

通过设置注册表设置和CreateFile标志,我能够访问区分大小写的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM