переносимость пути к файлу
-
07-07-2019 - |
Вопрос
У меня есть программа, которую мне нужно запустить под * nix и windows. поскольку программа берет пути файлов из файлов, проблема заключается в том, что делать с проблемой \
vs /
. Р>
Моя текущая мысль - добавить регулярное выражение, которое преобразует неправильное в правильное в зависимости от того, на какой системе я работаю. Это даст возможность любому типу работать в любой системе. Помимо того, что у сейчас есть две проблемы , кто-нибудь видит какие-либо другие проблемы?
(Другие лучшие решения приветствуются)
Редактировать: основная проблема - заставить Windows работать с Unix, а не наоборот.
Решение
/ полностью поддерживается и в win32.
Также посмотрите этот связанный вопрос
Другие советы
Windows обычно принимает либо \, либо /, поэтому стандартизация на / может упростить вашу проблему, если вы полностью контролируете имена файлов.
Рассматривали ли вы создание " файлового менеджера " класс, который будет обрабатывать все проблемы с файлами пути для вас? Таким образом, в вашем почтовом приложении, когда вы загружаете файл данных, вы можете вызвать что-то вроде этого.
LoadApplicationData(FileManager.GetDataFilePath)
Затем ваш файловый менеджер обнаружит среду, в которой он находится, и вернет правильный путь к файлу. Таким образом, вы также можете приспосабливаться к стандартам Win32 и Unix locatio (например, Program Files vs / usr и т. Д.).
Обратите внимание, что пути Win32 сложны, если учесть буквы дисков (нет аналога в Unix) и специальные «вилки» (термин MacOS pre-X - аналога вообще нет в Unix, хотя в MacOS X они есть - удивление, удивление ) это может быть предоставлено. Будьте осторожны.
Создайте парсер для вашего ввода, чтобы создать древовидную структуру узлов, представляющих каталоги. Затем вы можете «сохранить», пройдясь по дереву и записав любые разделители, которые вы хотите, или, по выбору, выполняя разные действия, например, проверяя, существует ли каталог, или записывая метафайлы. На самом деле это то, что я сейчас думаю, будет полезно для моего собственного приложения: -)
Вы не сказали, какой язык вы используете, поэтому я собираюсь эгоистично предположить c / c ++. boost , если вы хотите его использовать, имеет библиотека файловой системы . Конечно, если вы используете динамический язык, библиотеки абстракции FS, вероятно, уже существуют там (например, в perl, File :: Spec вполне стандартен).
Вы не сказали нам, из каких файлов вы читаете пути. Я собираюсь предположить, что это файлы конфигурации. В этом случае есть много способов, ИМХО правильный ответ заключается в разработке вашей программы, чтобы избежать манипулирования путями, если это возможно. Я разместил ответ здесь: https://stackoverflow.com/a/40980510/2345997 , который имеет отношение к делу.
способами:
<Ол>