我正在寻找一个或可能是少数几个概述文件系统路径元素的规范。我的意思是什么?主要是,我希望实现一个"简单"(read,air quotes(解析器规范,以验证我正在读取的路径是否有效。最后,我想解析一个由所述路径分隔的列表,即我可能从环境变量中读取的路径。
我一开始看的是DOS/Windows规范,但我预计Linux、UNC等也是可以接受的变体。
现在,我可以做的一件死脑筋的事情就是简单地取字符串并在分隔符上标记,然后可能将标记交给boost::filesystem::path
或std::filesystem::path
之类的东西。也许这就足够了?
我知道电子邮件地址、Uri之类的东西都有这样的规范。这就是我感兴趣的技术规格
我的目标语言是C++。如果不能做到这一点,我将利用Boost Spirit Qi来实现语法分析器。我希望语法应该表达有效字符之类的东西,在战略时期禁止无效字符,诸如此类的东西。
谢谢!
系统可以指定最大长度,如果指定了,则可以强制执行限制。
路径可以分解如下:
- 可选前导
/
字符 - 任意数量的路径组件,每个组件由除
/
或NUL之外的一个或多个字符组成,由一个或更多个/
字符分隔 - 可选的尾部
/
字符。此分解不会使任何路径字符串无效。它只是定义了如何解析它
在特定系统中,以两个斜杠开头的路径名可能(但不是必需的(具有一些特殊意义。除此之外,多个连续斜杠并不重要(但总是允许的(。因此,以一个斜杠开始的pathnam被认为与以三个或更多斜杠开始的同一系列组件相同。
我找到了关于命名约定等的Microsoft文档,这些文档或多或少地概述了这个问题,至少就Windows而言是这样。我还找到了这份陈述大纲。
我现在专注于Windows。开放式问题是关于drive_letter
、server
、sharename
、drive_spec
和physical_device
的命名约定。尽管如此,我还是认为drive_spec
和drive_letter
是一样的?然而,这并不积极。
否则,我会像整理允许的字符一样整理无效的字符集、它们的序列、部分、扩展名、保留名称等。