【问题标题】:Where can I find file system path specifications在哪里可以找到文件系统路径规范
【发布时间】:2019-05-07 15:27:16
【问题描述】:

我正在寻找一个,或者更可能是少数几个规范,这些规范概述了文件系统路径的元素。我的意思是什么?主要是,我希望实现一个“简单”(读取,空引号)解析器规范来验证我正在读取的路径是否有效。最终,我想解析所述路径的分隔列表,即我可能从环境变量中读取。

我最初正在查看 DOS/Windows 规范,但我希望 LinuxUNC 等,也是可以接受的变化。

现在,我能做的脑残就是简单地把字符串和 tokenize 放在 delimiter 上,然后也许将令牌交给 boost::filesystem::pathstd::filesystem::path。也许这就足够了?

我知道对于诸如电子邮件地址、Uri 之类的东西有这样的规范。这就是我感兴趣的技术规范。

我的目标语言是C++。如果上述情况失败,我将 Boost Spirit Qi 用于解析器语法。我希望语法应该表达诸如有效字符之类的东西,在战略时期禁止无效字符之类的东西。

谢谢!

【问题讨论】:

    标签: parsing boost path specifications


    【解决方案1】:

    Posix 标准在Chapter 3, Base Definitions 的第 3.271 节中定义了路径名。但这真的很简单:

    • 路径名可以包含除 NUL 之外的任何字符。

    • 系统可以指定最大长度,如果指定了,它可以强制执行该限制。

    • 路径可以分解如下:

      • 可选的前导 / 字符
      • 任意数量的路径组件,每个都包含一个或多个除/ 或 NUL 之外的字符,由一个或多个 / 字符分隔。
      • 可选的尾随 / 字符。 这种分解不会使任何路径字符串无效。它仅仅定义了它是如何被解析的。
    • 有可能(但不是必需的)以两个斜杠开头的路径名在特定系统上具有特殊意义。除此之外,多个连续的斜杠并不重要(但总是允许的)。因此,以单个斜杠开头的路径名被认为与以三个或更多斜杠开头的同一系列组件相同。

    【讨论】:

      【解决方案2】:

      我发现Microsoft docs 涉及命名约定等,这或多或少概述了问题,至少就 Windows 而言。我还发现了这个outline of representations

      我目前专注于 Windows。开放式问题是有关drive_letterserversharenamedrive_specphysical_device 的命名约定。虽然,我有点推测drive_specdrive_letter 相同?然而,不是积极的。

      否则,我将尽可能多地整理无效字符集,就像我是允许的字符、它们的序列、部分、扩展名、保留名称等一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多