Ответ 1
#if defined(_WIN32)
_mkdir(strPath.c_str());
#else
mkdir(strPath.c_str(), 0777); // notice that 777 is different than 0777
#endif
У меня возникла проблема при переносе 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
Любые идеи, что я могу сделать, чтобы они работали в обеих системах?
#if defined(_WIN32)
_mkdir(strPath.c_str());
#else
mkdir(strPath.c_str(), 0777); // notice that 777 is different than 0777
#endif
Вы должны иметь возможность использовать условную компиляцию для использования версии, применимой к ОС, для которой вы компилируете.
Кроме того, вы действительно уверены, что хотите установить флаги на 777 (как в широко открытом, пожалуйста, внесите свой вирус здесь)?
Вы можете условно скомпилировать некоторые директивы препроцессора, довольно полный список которых вы можете найти здесь: C/C++ Предопределенные макросы компилятора
#if defined(_WIN32)
_mkdir(strPath.c_str());
#elif defined(__linux__)
mkdir(strPath.c_str(), 0777);
// #else more?
#endif