Вопрос

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

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

Это было полезно?

Решение

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

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

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

Есть много способов, ИМХО, правильный ответ — перепроектировать вашу программу, чтобы избежать манипулирования путями.Я разместил ответ здесь: 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.Ограничьте свое приложение работой только с этими путями.Задокументируйте это ограничение и то, как ваше приложение обрабатывает пути к пользователю.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top