Межплатформенная обработка путей к файлам

Существуют ли какие-либо автономные классы C++ GNU, которые обрабатывают кросс-платформенные пути? Мои приложения основаны на Windows и LInux. Наши файлы конфигурации относятся к другому файлу в отдельном каталоге. Я хотел бы иметь возможность читать путь к другому файлу конфигурации в класс, который будет работать как в Linux, так и в Windows.

Какой класс предлагает наименьший размер для преобразования путей для использования в любой системе? Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
14
0
13 212
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Если вы не используете абсолютные пути, нет необходимости переводить вообще - Windows автоматически преобразует косую черту в обратную косую черту, поэтому, если вы используете относительные пути с разделителями пути косой чертой, вы будете золотыми. Вам действительно следует избегать абсолютных путей, если это вообще возможно.

Для моих простых нужд это идеально.

Superpolock 23.09.2008 21:54

не переносится в ОС с другими правилами escape-кода, кавычек и разделителей (например, Mac)

jwfearn 24.09.2008 02:55

попробуйте boost :: filesystem

Boost кажется очень полным, но для моих базовых потребностей излишний. Спасибо за вклад.

Superpolock 23.09.2008 22:03

Библиотека файловой системы в бусте наверняка вам поможет.

Есть много способов, ИМХО, правильный ответ - переделать вашу программу, чтобы избежать манипулирования путями. Я разместил здесь ответ: https://stackoverflow.com/a/40980510/2345997, что актуально.

способы:

  1. Добавьте параметр командной строки, который позволяет пользователю указывать рассматриваемый путь вместо чтения его из файла конфигурации.
  2. Добавьте параметр командной строки, чтобы пользователь мог указать базовый путь. Пути в файле конфигурации будут интерпретироваться как находящиеся под этим базовым путем.
  3. Разделите ваш файл конфигурации на три. Один файл будет иметь кроссплатформенную конфигурацию, другой файл будет иметь конфигурацию только для Windows, а последний файл будет иметь конфигурацию только для Linux. Затем пользователь может указать правильный путь как для Windows, так и для Linux. В Windows ваша программа будет читать межплатформенный файл конфигурации и файл конфигурации только для Windows. В Linux он будет читать кроссплатформенный файл и файл конфигурации только для Linux.
  4. Добавьте предварительную обработку в синтаксический анализ файла конфигурации. Это позволит вам иметь один файл конфигурации, в котором пользователь может заставить вашу программу игнорировать некоторые строки в файле в зависимости от того, на какой ОС она запущена. Таким образом, пользователь сможет указать путь к файлу дважды. Один раз для Linux и один раз для Windows.
  5. Измените дизайн так, чтобы файлы всегда находились в том же каталоге, что и ваш исполняемый файл - тогда пользователь указывает только имена файлов в файле конфигурации, а не пути к файлам.
  6. Используйте простую функцию, которая переключает "/" на "\". Затем документируйте пользователю, что они должны указать пути как пути Linux, и это преобразование будет применено для Windows.
  7. Создайте для этого свой собственный мини-язык и задокументируйте его для пользователя. Например: "/" - указывает разделитель каталогов, {root} - расширяется до корня файловой системы, {cwd} - расширяется до текущего каталога, {app} - расширяется до пути к вашему приложению и т. д. пользователь может указать пути к файлам, например: {root} /myfiles/bob.txt на обеих платформах.
  8. Некоторые пути будут работать на обеих платформах. Например: относительные пути вроде ../my files / bill.txt. Ограничьте свое приложение работой только с этими путями. Задокументируйте это ограничение и то, как ваше приложение обрабатывает пути к пользователю.

Другие вопросы по теме