在哪里可以找到文件系统路径规范

时间:2018-12-06 00:25:41

标签: parsing boost path specifications

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

我最初是在看 DOS / Windows 规范,但是我希望 Linux UNC 等也是可接受的变体。

现在,我能做的让脑筋急转弯的事情就是简单地将字符串和 tokenize 放在分隔符上,然后将令牌传递给类似{{1} }或boost::filesystem::path。也许就足够了?

我知道电子邮件地址,Uri的地址之类的东西都有这样的规范。这就是我感兴趣的技术规格。

我的目标语言是 C ++ 。如果不符合上述条件,我将利用 Boost Spirit Qi 进行语法分析。我希望语法能够表达诸如有效字符之类的东西,在战略时期禁止诸如此类的无效字符。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

  • 路径可分解如下:

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

答案 1 :(得分:0)

我发现Microsoft docs与命名约定等有关,至少就Windows而言,它或多或少地概述了该问题。我还发现了这个outline of representations

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

否则,我将整理尽可能多的无效字符集,包括允许的字符,它们的序列,部分,扩展名,保留名称等。