【问题标题】:What are the syntaxes for pathnames under Windows and under Linux respectively?Windows 下和 Linux 下路径名的语法分别是什么?
【发布时间】:2017-09-17 08:57:03
【问题描述】:

我正在考虑编写一个程序来检查路径名是否有效。

  1. Windows 下路径名(包括相对路径名)的语法是什么?我google了一会儿,我只找到了关于无效路径名的个别情况的错误报告。

  2. Linux 也有同样的问题?虽然我大部分时间都在使用Linux,但我不知道是否有定义它的标准文档。 POSIX?

谢谢。

【问题讨论】:

    标签: linux windows path


    【解决方案1】:

    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
    • UNC:\\server\share\file
    • 驱动器/音量:d:

    还有一些特殊的保留名称,如NULCONAUXCOM1

    Windows NT 增加了更多复杂性:

    • 命名流:d:\dir\subdir\file:stream
    • 转义/长路径:\\?\d:\file
    • 转义 UNC:\\?\UNC\server\share\file
    • 设备路径:\\.\PhysicalDisk1
    • Volume GUID path: \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\

    如果您在更高的 shell 级别上操作,您还需要处理几个额外的类型:

    • shell 协议:shell:SendTo
    • Shell 命名空间:::{someGUID}\::{anotherGUID}

    大多数函数还将接受/ 作为路径分隔符。甚至像 d:f:s(文件 f 中的流 s 相对于驱动器 d 上的当前目录)这样疯狂的东西也应该被认为是有效的。

    更多信息请参见MSDN

    另一方面,Linux 仅将 / 和空字节 (\0) 视为特殊的,并允许您在路径中使用换行符等。如果您在 shell 脚本中处理路径,通常可以使用 IFS。阅读this rant for more information

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      相关资源
      最近更新 更多