16

LinuxツールをWindowsに移植するときに問題が発生しました。WindowsシステムでMinGWを使用しています。私はすべての入力/出力を処理するクラスを持っており、その中には次の行があります:

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

両方のシステムで機能するように、私にできることはありますか?

4

3 に答える 3

31
#if defined(_WIN32)
_mkdir(strPath.c_str());
#else 
mkdir(strPath.c_str(), 0777); // notice that 777 is different than 0777
#endif
于 2012-04-27T19:34:24.580 に答える
3

条件付きコンパイルを使用して、コンパイル対象のOSに適用されるバージョンを使用できるはずです。

また、フラグを777に設定してもよろしいですか(広く開いている場合と同様に、ここにウイルスを登録してください)。

于 2012-04-27T19:34:33.443 に答える
1

いくつかのプリプロセッサディレクティブを使用して条件付きでコンパイルできます。その完全なリストは、C /C++コンパイラの定義済みマクロにあります。

#if defined(_WIN32)
    _mkdir(strPath.c_str());
#elif defined(__linux__)
    mkdir(strPath.c_str(), 0777);
// #else more?
#endif
于 2012-04-27T19:35:31.930 に答える