Что эквивалентно Paths.get("abc/def.jpg"), чтобы получить независимый от ОС путь в C и C++?
Я хотел бы написать и повторно использовать один и тот же код в Linux и Windows, особенно константы пути.
fopen(base+"subfolder/abc.bin","wb")
Приведенный выше код работал нормально, когда я кросс-компилировал для Windows в Linux.
Но мне пришлось изменить код на fopen(base+"subfolder\\abc.bin","wb")
скомпилировать его в Windows напрямую.
Теперь я добавил к программному обеспечению много зависимостей, которые потребовали бы кросс-компиляции, если бы я кросс-компилировал свое программное обеспечение, чего я не хочу, поэтому я использую предварительно скомпилированные двоичные файлы в версиях программного обеспечения как для Windows, так и для Linux.
Теперь проблема, с которой я сталкиваюсь, заключается в том, что если бы я захотел скомпилировать в Linux, мне пришлось бы изменить путь, который я не хочу делать, поскольку мне пришлось бы поддерживать две разные ветви программного обеспечения. Есть ли способ, похожий на использование Java Paths.get("abcd/def/hij.bin").toString()
, Я не просто прошу системный вызов, подойдет пользовательская функция, которая идентифицирует базовую ОС и соответственно изменяет строку пути.
Мне нужны и C, и C++.
1 ответ
Не уверен, что вам удалось найти решение, но вы можете изменить путь / строку в соответствии с ОС с помощью предопределенных макросов, вот пример:
string getFileName(const string& s) {
char sep = '/';
#ifdef _WIN32
sep = '\\';
#endif
size_t i = s.rfind(sep, s.length());
if (i != string::npos) {
return(s.substr(i+1, s.length() - i));
}
return("");
}
Вот ссылка с дополнительной информацией о предопределенных макросах.