我正在寻找一个或更可能是少数几个概述文件系统路径元素的规范。那是什么意思主要是,我正在寻求实现一个“简单”(读取的,带引号的)解析器规范,以验证我正在读取的路径是否有效。最终,我想解析所述路径的分隔列表,即可以从环境变量中读取。
我最初是在看 DOS / Windows 规范,但是我希望 Linux , UNC 等也是可接受的变体。
现在,我能做的让脑筋急转弯的事情就是简单地将字符串和 tokenize 放在分隔符上,然后将令牌传递给类似{{1} }或boost::filesystem::path
。也许就足够了?
我知道电子邮件地址,Uri的地址之类的东西都有这样的规范。这就是我感兴趣的技术规格。
我的目标语言是 C ++ 。如果不符合上述条件,我将利用 Boost Spirit Qi 进行语法分析。我希望语法能够表达诸如有效字符之类的东西,在战略时期禁止诸如此类的无效字符。
谢谢!
答案 0 :(得分:0)
Posix标准在Chapter 3, Base Definitions的3.271节中定义了路径名。但这很简单:
路径名可以包含NUL以外的任何字符。
系统可以指定最大长度,如果指定了最大长度,则可以强制执行该限制。
路径可分解如下:
/
个字符/
或NUL以外的字符组成,并由一个或多个/
字符分隔。/
个字符。
这种分解不会使任何路径字符串无效。它只是定义了它的解析方式。在特定系统上可能(但不是必需)以正好两个斜杠开头的路径名具有某些特殊意义。除此之外,多个连续的斜杠并不重要(但始终允许)。因此,以单个斜杠开头的pathnam被认为与以三个或更多斜杠开头的相同系列的组件相同。
答案 1 :(得分:0)
我发现Microsoft docs与命名约定等有关,至少就Windows而言,它或多或少地概述了该问题。我还发现了这个outline of representations。
我目前专注于Windows。开放式问题是有关drive_letter
,server
,sharename
,drive_spec
和physical_device
的命名约定。虽然,我有点认为drive_spec
与drive_letter
相同?但是不是积极的。
否则,我将整理尽可能多的无效字符集,包括允许的字符,它们的序列,部分,扩展名,保留名称等。