Существуют ли какие-либо автономные классы С++ GNU, которые обрабатывают кроссплатформенные пути? Мои приложения строятся на Windows и Linux. Наши файлы конфигурации ссылаются на другой файл в отдельном каталоге. Я хотел бы иметь возможность прочитать путь к другому файлу конфигурации в класс, который будет работать как в Linux, так и в Windows.
Какой класс предложит наименьшую площадь для преобразования путей для использования в любой из систем? Спасибо
Ответ 1 · рейтинг 18 · Adam Rosenfield
Если вы не используете абсолютные пути, переводить вообще не нужно - Windows автоматически преобразует косую черту в обратную, поэтому, если вы используете относительные пути с разделителями путей косой черты, вы будете золотыми. Вы действительно должны избегать абсолютных путей, если это вообще возможно.
Ответ 4 · user1976
Есть много способов, ИМХО, правильный ответ - изменить дизайн вашей программы, чтобы избежать манипулирования путями. Я разместил ответ здесь: https://stackoverflow.com/a/40980510/2345997, что актуально.
способы:
- Добавьте параметр командной строки, который позволяет пользователю указать рассматриваемый путь, а не читать его из файла конфигурации.
- Добавьте параметр командной строки, чтобы пользователь мог указать базовый путь. Пути в файле конфигурации будут интерпретироваться как расположенные по этому базовому пути.
- Разделите файл конфигурации на три части. Один файл будет иметь кросс-платформенную конфигурацию, другой файл будет иметь конфигурацию только для Windows, а последний файл будет иметь конфигурацию только для Linux. Затем пользователь может указать правильный путь как для Windows, так и для Linux. В Windows ваша программа будет читать кроссплатформенный файл конфигурации и файл конфигурации только для Windows. В Linux он будет читать кроссплатформенный файл и файл конфигурации только для Linux.
- Добавьте предварительную обработку к разбору файла конфигурации. Это позволит вам иметь один файл конфигурации, в котором пользователь может заставить вашу программу игнорировать некоторые строки в файле в зависимости от того, на какой ОС работает программа. Таким образом, пользователь сможет дважды указать путь к файлу. Один раз для Linux и один раз для Windows.
- Измените дизайн так, чтобы файлы всегда находились в той же директории, что и ваш исполняемый файл - тогда пользователь указывает только имена файлов в файле конфигурации, а не пути к файлам.
- Используйте простую функцию, которая переключает "/" на "\". Затем задокументируйте пользователю, что он должен указывать пути как пути Linux, и это преобразование будет применено к окнам.
- Создайте для этого свой собственный мини-язык путей и документируйте его для пользователя. Например: "/" - указывает разделитель каталогов, {root} - расширяется до корня файловой системы, {cwd} - расширяется до текущего каталога, {app} - расширяется до пути к вашему приложению и т. д. Затем пользователь может указать пути к файлам, например: {root}/myfiles/bob.txt на обеих платформах.
- Некоторые пути будут работать на обеих платформах. Например: относительные пути, такие как ../my files/bill.txt. Ограничьте свое приложение, чтобы оно работало только с этими путями. Задокументируйте это ограничение и то, как ваше приложение обрабатывает пути к пользователю.