2012-04-27 51 views
13

將Linux工具移植到Windows時遇到問題。我在Windows系統上使用MinGW。我有一個處理所有的輸入/輸出和內部是此行的一類:mkdir Windows vs Linux

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

你可以計算出你在哪個系統,並使用正確的。像'#ifdef LINUX ... #else ... #endif'這樣的東西# – twain249 2012-04-27 19:33:36

+5

條件編譯? – 2012-04-27 19:33:38

+7

*旁白*:您的意思是使用'0777',而不是'777'。他們是非常不同的數字。 – 2012-04-27 19:58:37

回答

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

Thx,快速幫助 – MindlessMaik 2012-04-27 19:37:42

+2

「_WIN32 - 定義用於Win32和Win64的應用程序」。 (ref:http://msdn.microsoft.com/en-us/library/b0084kay.aspx)因此,在這裏不需要檢查_WIN64。 – cweston 2012-05-25 19:58:03

+0

作爲參考,這是一個很好的事情要知道。在這種情況下短路評估使得它沒有實際意義。 – gcochard 2012-05-25 19:59:17

3

您應該能夠使用條件編譯來使用適用於您正在編譯的操作系統的版本。

另外,你真的確定你要設置標誌爲777(如在廣泛開放,請存放在這裏的病毒)?

+0

+1 777警告 – Benj 2012-04-27 22:27:35

+0

生活危險! ;) – Jon 2015-04-20 19:58:02

1

可以有條件地與一些預處理指令,一個漂亮的完整列表,其中,你可以在這裏找到編譯:C/C++ Compiler Predefined Macros

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

如果它是_WIN64只是不做任何事情? – 2012-04-27 19:35:52

+5

@EricJ。 - '_WIN32'也是在64位窗口中定義的。 – birryree 2012-04-27 19:36:51