2012-04-27 23 views
13

मुझे विंडोज़ में लिनक्स टूल पोर्ट करते समय कोई समस्या है। मैं एक विंडोज सिस्टम पर MinGW का उपयोग कर रहा हूँ। मैं एक वर्ग है जो सभी में/आउटपुट संभालती है और भीतर इस लाइन है:mkdir विंडोज बनाम लिनक्स

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

+5

सशर्त संकलन जैसे कुछ? –

+7

* इसके अलावा *: आपका मतलब '0777',' 777' नहीं है। वे बहुत अलग संख्या हैं। –

उत्तर

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

+2

"_WIN32 - Win32 और Win64 के लिए अनुप्रयोगों के लिए परिभाषित"। (रेफरी: http://msdn.microsoft.com/en-us/library/b0084kay.aspx) इसलिए _WIN64 के लिए चेक यहां आवश्यक नहीं है। – cweston

+0

संदर्भ के लिए, यह जानना बहुत अच्छी बात है। शॉर्ट सर्किट मूल्यांकन हालांकि इस मामले में इसे हल करता है। – gcochard

3

आप ओएस आप के लिए संकलन कर रहे हैं पर लागू होने वाला संस्करण का उपयोग करने सशर्त संकलन का उपयोग करने में सक्षम होना चाहिए।

इसके अलावा, क्या आप वाकई सुनिश्चित हैं कि आप झंडे को 777 पर सेट करना चाहते हैं (जैसा कि खुले खुले में है, कृपया अपना वायरस यहां जमा करें)?

+0

+1 शामिल करना चाह सकते हैं! ;) – Benj

+0

खतरनाक रूप से लाइव के लिए '#ifdef _MSC_VER'' #'' endif' – Jon

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 है तो बस कुछ भी नहीं करें ??? –

+5

@EricJ। - '_WIN32' को 64-बिट विंडो में भी परिभाषित किया गया है। – birryree

संबंधित मुद्दे