Как сгенерировать независимый от ОС путь в c ++ - PullRequest
8 голосов
/ 29 июня 2009

У меня есть путь назначения и имя файла в виде строки, и я хочу объединить их с помощью c ++.

Есть ли способ сделать это и позволить программе / компилятору выбирать между / и \ для Windows или Unix-систем?

Ответы [ 4 ]

7 голосов
/ 29 июня 2009

Если вы хотите сделать это во время компиляции, вы можете сделать что-то вроде

#ifdef WIN32
#define OS_SEP '\\'
#else
#define OS_SEP '/'
#endif

Или вы можете просто использовать '/', и в Windows все будет отлично работать (за исключением старых программ, которые анализируют строку и работают только с '\'). Это выглядит забавно, только если отображается для пользователя таким образом.

7 голосов
/ 29 июня 2009

Как это часто бывает, в Boost есть библиотека, которая делает то, что вы хотите. Здесь учебник.

2 голосов
/ 30 июня 2009

Используйте '/' внутри, везде. Затем напишите набор служебных функций, которые импортируют путь любой формы в «/». Напишите функцию 'native path', в которой есть специфичные для системы ifdefs и необходимые преобразования. это может быть вызвано по требованию.

1 голос
/ 29 июня 2009

Один простой способ сделать то, что вы просили, - это иметь небольшую (возможно встроенную) функцию, которая использует магию препроцессора для определения платформы (#ifdef WIN32 и т. Д.) И возвращает соответствующий символ-разделитель.

Ответ немного сложнее, потому что есть и другие более существенные различия, чем символ разделителя. Файловые системы Windows могут иметь несколько корней (C: \, D: \ и т. Д.), В то время как вся система FS основана на / в Unix-земле.

Лучшим советом может быть использование boost::filesystem.

...