У меня есть путь назначения и имя файла в виде строк, и я хочу объединить их с помощью С++.
Есть ли способ сделать это и позволить программе/компилятору выбирать между / и \ для систем Windows или Unix?
У меня есть путь назначения и имя файла в виде строк, и я хочу объединить их с помощью С++.
Есть ли способ сделать это и позволить программе/компилятору выбирать между / и \ для систем Windows или Unix?
Если вы хотите сделать это во время компиляции, вы, безусловно, можете сделать что-то вроде
#ifdef WIN32
#define OS_SEP '\\'
#else
#define OS_SEP '/'
#endif
Или вы можете просто использовать '/', и все будет отлично работать в Windows (за исключением старых программ, которые анализируют строку и работают только с '\'). Это выглядит забавно только в том случае, если отображается для пользователя таким образом.
Как это часто бывает, у Boost есть библиотека, которая делает то, что вы хотите. Вот учебник.
Используйте '/' везде внутри. Затем напишите набор служебных функций, которые импортируют путь любой формы в использование '/'. Напишите функцию «собственного пути», которая имеет специфичные для системы ifdef и необходимые преобразования. который можно вызвать по запросу.
Один из простых способов сделать то, о чем вы просили, — создать небольшую (вероятно встроенную) функцию, которая использует магию препроцессора для определения платформы (#ifdef WIN32
и т. д.) и возвращает соответствующий символ-разделитель.
Ответ немного сложнее, потому что есть и другие более существенные отличия, чем символ-разделитель. Файловые системы Windows могут иметь несколько корней (C:\, D:\ и т. д.), в то время как вся ФС коренится в / в Unix-стране.
Лучшим советом может быть использование boost::filesystem
. .