简而言之:如何询问 Windows 当前系统中的目录分隔符?
不同版本的 Windows 表现不同(例如,在英文版本中 \
和 /
都起作用,在日语版本中是 ¥,在韩语版本中是 ₩ 等等)。
是否有任何方法可以避免硬编码,而是在运行时询问 Windows?
注意:
理想情况下,解决方案应该不依赖于高级 DLL,比如 ShlWAPI.dll
,因为较低级别的库也依赖于此。所以它实际上应该依赖于 kernel32.dll
或 ntdll.dll
等…尽管我很难找到任何东西,无论是在高级别还是低级别。
编辑:
一些小实验告诉我,它是 Win32 子系统(即 kernel32.dll
…或者是 ntdll.dll
中的 RtlDosPathNameToNtPathName_U
吗?不确定,没有测试...),它将正斜杠转换为反斜杠,而不是内核。(在路径前缀中添加 \\?\
会使后面无法使用正斜杠--而 NT 原生用户模式 API 在使用正斜杠时也会失败。)
因此,显然它并不完全“内置于” Windows 中,而只是一个兼容性功能--这意味着您不能盲目地替换反斜杠以代替正斜杠,因为任何随机添加 \\?\
前缀的程序都会自动在正斜杠上出现错误。
关于这个问题我有一些矛盾的感受,但我只是想提一下。
(虽然技术上来说路径分隔符用于分隔路径,而不是目录(;
与\
),但我将其标记为“路径分隔符”。希望人们能够理解我的意思。)
0x5c
。不同之处在于所使用的代码页用于显示字符。在ANSI代码页中,0x5c
是反斜杠。在日语代码页932中,0x5c是日元符号;而在韩文代码页949中,它则是韩元符号。 - vcsjones/
(或其他字符)是否是路径分隔符 -- 在Windows 7上似乎是这样的,但在XP上不是,如果可能的话,我宁愿避免硬编码这个规则。 - user541686