mkdir Windows vs Linux

У меня возникла проблема при переносе Linux-инструмента в Windows. Я использую MinGW в системе Windows. У меня есть класс, который обрабатывает все in/output и внутри этой строки:

mkdir(strPath.c_str(), 0777); // works on Linux but not on Windows and when it is changed to
_mkdir(strPath.c_str()); // it works on Windows but not on Linux

Любые идеи, что я могу сделать, чтобы они работали в обеих системах?

Ответ 1

#if defined(_WIN32)
_mkdir(strPath.c_str());
#else 
mkdir(strPath.c_str(), 0777); // notice that 777 is different than 0777
#endif

Ответ 2

Вы должны иметь возможность использовать условную компиляцию для использования версии, применимой к ОС, для которой вы компилируете.

Кроме того, вы действительно уверены, что хотите установить флаги на 777 (как в широко открытом, пожалуйста, внесите свой вирус здесь)?

Ответ 3

Вы можете условно скомпилировать некоторые директивы препроцессора, довольно полный список которых вы можете найти здесь: C/C++ Предопределенные макросы компилятора

#if defined(_WIN32)
    _mkdir(strPath.c_str());
#elif defined(__linux__)
    mkdir(strPath.c_str(), 0777);
// #else more?
#endif