>我正在考虑编写一个程序来检查路径名是否有效。
-
Windows下路径名(包括相对路径名)的语法是什么?我用谷歌搜索了一段时间,我只找到了有关无效路径名个别情况的错误报告。
-
同样的问题适用于Linux?虽然我大部分时间都在使用 Linux,但我不知道是否有定义它的标准文档。波西斯?
谢谢。
Windows有多个层(NT,Win32,Posix/WSL)和多个路径类型,但您可能指的是DOS/Win32类型,并且该主题本身就足够复杂。
您有基本的 DOS 路径:
- 绝对:
d:dirsubdirfile
- 当前目录相对:
file
、.subdirfile
和..otherfile
- 根相对/当前驱动器:
dirsubdirfile
- 驱动器相对:
d:file
- "上游":
d:dir..otherdirfile
等。 - UNC:
\serversharefile
- 驱动器/卷:
d:
还有特殊的保留名称,如NUL
、CON
、AUX
和COM1
。
Windows NT增加了进一步的复杂性:
- 命名流:
d:dirsubdirfile:stream
- 逃逸/长路径:
\?d:file
- 转义的UNC:
\?UNCserversharefile
- 设备路径:
\.PhysicalDisk1
- 卷 GUID 路径:
\?Volume{26a21bda-a627-11d7-9931-806e6f6e6963}
如果您在更高的 shell 级别操作,您还需要处理几种其他类型:
- 外壳协议:
shell:SendTo
- 外壳命名空间:
::{someGUID}::{anotherGUID}
大多数函数还将接受/
作为路径分隔符。即使是像d:f:s
这样疯狂的东西(文件 f 中的流 s 相对于驱动器 d 上的当前目录)也应该被认为是有效的。
有关详细信息,请参阅 MSDN
。另一方面,Linux仅将/
和空字节(