Обработка путей к файлам кроссплатформенный - PullRequest
14 голосов
/ 23 сентября 2008

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

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

Ответы [ 4 ]

13 голосов
/ 23 сентября 2008
12 голосов
/ 23 сентября 2008

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

5 голосов
/ 23 сентября 2008

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

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

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

способы:

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