Обработка переходов между файлами
Существуют ли какие-либо автономные классы С++ GNU, которые обрабатывают сквозные пути? Мои приложения основаны на Windows и LInux. Наши файлы конфигурации относятся к другому файлу в отдельном каталоге. Я хотел бы прочитать путь для другого файла конфигурации в класс, который будет работать как на Linux, так и на Windows.
Какой класс предложит наименьший след для перевода путей для использования в любой из этих систем? Благодаря
Ответы
Ответ 1
Если вы не используете абсолютные пути, нет необходимости переводить вообще - Windows автоматически преобразует косые черты в обратную косую черту, поэтому, если вы используете относительные пути с разделителями пути прямой косой черты, вы будете золотыми. Вы должны действительно избегать абсолютных путей, если это вообще возможно.
Ответ 2
попробуйте boost:: filesystem
Ответ 3
Библиотека файловой системы в boost, вероятно, поможет вам.
Ответ 4
Есть много способов, ИМХО, правильный ответ - перепроектировать вашу программу, чтобы избежать манипуляций с путями. Я разместил здесь ответ: fooobar.com/info/286570/..., который имеет значение.
способами:
- Добавьте параметр командной строки, который позволяет пользователю указать рассматриваемый путь вместо того, чтобы читать его из файла конфигурации.
- Добавьте параметр командной строки, чтобы пользователь мог указать базовый путь. Пути в файле конфигурации будут интерпретироваться как расположенные под этим базовым путем.
- Разделите файл конфигурации на три. Один файл будет иметь конфигурацию кросс-платформы, другой файл будет иметь конфигурацию только для Windows, а окончательный файл будет иметь только конфигурацию Linux. Затем пользователь может указать правильный путь для Windows и Linux. В окнах ваша программа будет читать кросс-платформенный файл конфигурации и только файл конфигурации только для Windows. В Linux он прочитает кросс-платформенный файл и только конфигурационный файл Linux.
- Добавьте предварительную обработку в синтаксический анализ вашего файла конфигурации. Это позволит вам иметь один файл конфигурации, в котором пользователь может заставить вашу программу игнорировать некоторые строки в файле в зависимости от того, на какой ОС работает программа. Таким образом, пользователь сможет указать путь к файлу дважды. Однажды для Linux и один раз для Windows.
- Измените дизайн так, чтобы файлы всегда находились в том же каталоге, что и ваш исполняемый файл, - тогда пользователь указывает только имена файлов в файле конфигурации, а не пути к файлам.
- Используйте простую функцию, которая переключает "/" на "\". Затем документируйте пользователю, что они должны указывать пути как пути Linux, и это преобразование будет применяться для окон.
- Создайте свой собственный мини-язык для этого и запишите его пользователю. Например: "/" - указывает разделитель каталогов, {root} - расширяется до корня файловой системы, {cwd} - расширяется до текущего каталога, {app} - расширяется до пути к вашему приложению и т.д. Затем пользователь может указать пути к файлам, например: {root}/myfiles/bob.txt на обеих платформах.
- Некоторые пути будут работать на обеих платформах. Например: относительные пути, такие как файлы.. /my/bill.txt. Ограничьте ваше приложение только работой с этими путями. Документируйте это ограничение и как ваше приложение обрабатывает пути к пользователю.