gpt4 book ai didi

c - 在 Windows 上获取目录分隔符字符? ('\' , '/' 等)

转载 作者:太空狗 更新时间:2023-10-29 16:26:37 28 4
gpt4 key购买 nike

tl;dr:我如何询问 Windows 系统上的当前目录分隔符是什么?


不同版本的 Windows 似乎表现不同(例如 \/ 都适用于英文版本,¥ is apparently on the Japanese version, ₩ is apparently on the Korean version 等...

有什么办法可以避免硬编码,而是在运行时询问 Windows?

备注:

理想情况下,解决方案应该 依赖于像 ShlWAPI.dll 这样的高级 DLL,因为低级库也依赖于这个。所以它实际上应该依赖于 kernel32.dllntdll.dll 或类似的...虽然我找不到任何东西无论是高水平还是低水平。

编辑:

一点实验告诉我它是 Win32 子系统(即 kernel32.dll... 或者它可能是 RtlDosPathNameToNtPathName_U in ntdll.dll? 不确定,没有测试...) 将正斜杠转换为反斜杠,而不是内核。 (前缀 \\?\ 使得后面的路径中无法使用正斜杠——并且 NT native 用户模式 ​​API 也因正斜杠而失败。)

很明显,它并没有完全“内置”到 Windows 中,而只是一种兼容性功能——这意味着您不能盲目地用斜杠代替反斜杠,因为任何随机为 \\?\< 添加前缀的程序 路径将自动在正斜杠处中断。

我对就此得出什么结论有复杂的感觉,但我只是想提一下。

(我将其标记为“路径分隔符”,尽管这在技术上是不正确的,因为路径分隔符用于分隔路径,而不是目录(; vs. \)。希望人们明白我的意思。)

最佳答案

虽然 ¥ 字符在各自的韩文和日文 Windows 版本中显示为目录分隔符号,但它们只是这些 Windows 版本表示相同 Unicode 的方式代码点 U+005c 作为字形。反斜杠的基础代码点在英语 Windows 以及日语和韩语 Windows 版本中仍然相同。

可以在此页面上找到对此的额外确认:http://msdn.microsoft.com/en-us/library/dd374047(v=vs.85).aspx

Security Considerations for Character Sets in File Names

Windows code page and OEM character sets used on Japanese-language systems contain the Yen symbol (¥) instead of a backslash (\). Thus, the Yen character is a prohibited character for NTFS and FAT file systems. When mapping Unicode to a Japanese-language code page, conversion functions map both backslash (U+005C) and the normal Unicode Yen symbol (U+00A5) to this same character. For security reasons, your applications should not typically allow the character U+00A5 in a Unicode string that might be converted for use as a FAT file name.

此外,我不知道有任何 Windows API 函数可以为您提供系统的路径分隔符,但您可以相信它在所有情况下都是 \

http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#naming_conventions

The following fundamental rules enable applications to create and process valid names for files and directories, regardless of the file system:

...

Use a backslash (\) to separate the components of a path. The backslash divides the file name from the path to it, and one directory name from another directory name in a path. You cannot use a backslash in the name for the actual file or directory because it is a reserved character that separates the names into components.

...

关于/

Windows 应该 support the use of /作为 API 函数中的目录分隔符,但不一定在命令提示符 (command.com) 中。

Note File I/O functions in the Windows API convert "/" to "\" as part of converting the name to an NT-style name, except when using the "\?\" prefix as detailed in the following sections.

弄清楚这一切的真相是“艰难的”,但这可能是一个关于 Windows 路径中的 / 的非常有用的链接:http://bytes.com/topic/python/answers/23123-when-did-windows-start-accepting-forward-slash-path-separator

关于c - 在 Windows 上获取目录分隔符字符? ('\' , '/' 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7314606/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com