2012-04-27 72 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