web-dev-qa-db-ja.com

mkdirWindowsとLinux

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

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

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

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

また、フラグを777に設定してもよろしいですか(ワイドオープンの場合と同様に、ここにウイルスを登録してください)。

3
Eric J.

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

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