Что эквивалентно 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("");
}

Вот ссылка с дополнительной информацией о предопределенных макросах.

Другие вопросы по тегам