【发布时间】:2017-09-17 08:57:03
【问题描述】:
我正在考虑编写一个程序来检查路径名是否有效。
Windows 下路径名(包括相对路径名)的语法是什么?我google了一会儿,我只找到了关于无效路径名的个别情况的错误报告。
Linux 也有同样的问题?虽然我大部分时间都在使用Linux,但我不知道是否有定义它的标准文档。 POSIX?
谢谢。
【问题讨论】:
我正在考虑编写一个程序来检查路径名是否有效。
Windows 下路径名(包括相对路径名)的语法是什么?我google了一会儿,我只找到了关于无效路径名的个别情况的错误报告。
Linux 也有同样的问题?虽然我大部分时间都在使用Linux,但我不知道是否有定义它的标准文档。 POSIX?
谢谢。
【问题讨论】:
Windows 有多个层(NT、Win32、Posix/WSL)和多种路径类型,但您可能指的是 DOS/Win32 类型,并且该主题本身就足够复杂。
你有基本的 DOS 路径:
d:\dir\subdir\file
file、.\subdir\file 和 ..\otherfile
\dir\subdir\file
d:file
d:\dir\..\otherdir\file 等\\server\share\file
d:
还有一些特殊的保留名称,如NUL、CON、AUX 和COM1。
Windows NT 增加了更多复杂性:
d:\dir\subdir\file:stream
\\?\d:\file
\\?\UNC\server\share\file
\\.\PhysicalDisk1
\\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\
如果您在更高的 shell 级别上操作,您还需要处理几个额外的类型:
shell:SendTo
::{someGUID}\::{anotherGUID}
大多数函数还将接受/ 作为路径分隔符。甚至像 d:f:s(文件 f 中的流 s 相对于驱动器 d 上的当前目录)这样疯狂的东西也应该被认为是有效的。
更多信息请参见MSDN。
另一方面,Linux 仅将 / 和空字节 (\0) 视为特殊的,并允许您在路径中使用换行符等。如果您在 shell 脚本中处理路径,通常可以使用 IFS。阅读this rant for more information。
【讨论】: