Где я могу найти спецификации пути к файловой системе - PullRequest
0 голосов
/ 06 декабря 2018

Я ищу одну или, скорее всего, несколько спецификаций, которые описывают элементы пути к файловой системе.Что я имею в виду под этим?В основном, я ищу реализацию "простого" (читайте, в кавычках) спецификации синтаксического анализатора, чтобы убедиться, что путь, который я читаю, действителен.В конечном счете, я хочу проанализировать разделенный список указанных путей, то есть, что я мог бы прочитать из переменной среды.

Я смотрю на DOS / Windows спецификации, но я ожидаю, что Linux , UNC и т. д. также будут приемлемыми вариантами.

Теперь, мертвый мозг, который я мог бы сделать, это простовозьмите строку и токенизируйте на разделителе , а затем, возможно, передайте токены во что-то вроде boost::filesystem::path или std::filesystem::path.Возможно, этого было бы достаточно?

Я знаю, что существуют такие спецификации для таких вещей, как адреса электронной почты, адреса Ури и подобные вещи.Это интересующая меня техническая спецификация.

Мой целевой язык C ++ .В противном случае я использую Boost Spirit Qi для грамматики синтаксического анализатора.Я ожидаю, что грамматика должна выражать такие вещи, как действительные символы, запрещать недопустимые символы в стратегическое время и тому подобное.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Я нашел Документы Microsoft , касающиеся соглашений об именах и тому подобного, которые более или менее обрисовывают проблему, по крайней мере, в отношении Windows.Я также нашел этот набросок представлений .

В данный момент я сосредоточен на Windows.Открытые вопросы - это соглашения об именах, касающиеся drive_letter, server, sharename, drive_spec и physical_device.Хотя я несколько понимаю, что drive_spec - это то же самое, что drive_letter?Однако, это не так.

В противном случае я собираю столько же недопустимых наборов символов, сколько я допустимых символов, их последовательности, части, расширения, зарезервированные имена и т. Д.

0 голосов
/ 06 декабря 2018

Стандарт Posix определяет Pathname в разделе 3.271 Глава 3, Базовые определения .Но это действительно просто:

  • Имена путей могут содержать любой символ, кроме NUL.

  • Система может указать максимальную длину и, если она ее определяет,он может применять ограничение.

  • Путь можно разложить следующим образом:

    • Необязательный ведущий / символов
    • Любое количествоКомпоненты пути, каждый из которых состоит из одного или нескольких символов, отличных от / или NUL, разделенных одним или несколькими / символами.
    • Необязательный конечный символ / символов.Эта декомпозиция не делает строку пути недопустимой.Он просто определяет, как он анализируется.
  • Возможно (но не обязательно), что имена путей, начинающиеся с ровно двух слешей, имеют какое-то особое значение в конкретной системе.Помимо этого, несколько последовательных слешей не имеют значения (но всегда разрешены).Таким образом, путь, начинающийся с одной косой черты, считается таким же, как и тот же ряд компонентов, начинающийся с трех или более косых черт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...