2009-06-29 6 views
7

में ओएस स्वतंत्र पथ कैसे उत्पन्न करें मेरे पास एक गंतव्य पथ और फ़ाइल नाम स्ट्रिंग के रूप में है और मैं उन्हें C++ के साथ जोड़ना चाहता हूं।सी ++

क्या ऐसा करने का कोई तरीका है और प्रोग्राम/कंपाइलर को विंडोज़ या यूनिक्स सिस्टम के लिए/और \ के बीच चुनने दें?

उत्तर

7

यदि आप संकलन समय आप निश्चित रूप से की तरह

#ifdef WIN32 
#define OS_SEP '\\' 
#else 
#define OS_SEP '/' 
#endif 

कुछ कर सकते हैं या फिर आप '/' इस्तेमाल कर सकते हैं और चीजों (खिड़कियों पर ठीक से काम करेंगे बड़े प्रोग्राम हैं जो पार्स के अलावा में यह करना चाहता था स्ट्रिंग और केवल '\' के साथ काम करते हैं)। अगर उपयोगकर्ता को इस तरह प्रदर्शित किया जाता है तो यह केवल मजाकिया लगता है।

+0

का तरीका है मैंने अभी तक विंडवॉस मशीन के साथ इसका परीक्षण नहीं किया है, लेकिन अगर यह काम करता है तो यह मेरे लिए पर्याप्त है। – Janusz

+0

जहां तक ​​यह जाता है, यह काम करेगा। ध्यान रखें कि डॉस पथ एक ड्राइव अक्षर और एक कोलन से शुरू हो सकते हैं (अन्यथा, वे वर्तमान ड्राइव के सापेक्ष हैं)। और वैकल्पिक 'कांटे', और डिवाइस के नाम से सावधान रहें। –

+2

विंडोज़ फॉरवर्ड स्लैश के साथ वास्तव में ठीक है। –

7

जैसा कि अक्सर होता है, बूस्ट में एक लाइब्रेरी होती है जो आप चाहते हैं। Here एक ट्यूटोरियल है।

+1

क्या मुझे वास्तव में/और \ के बीच पसंद के लिए "पूरी" लाइब्रेरी चाहिए? – Janusz

+3

नहीं, लेकिन यह डॉस और यूनिक्स फ़ाइल नामों के बीच एकमात्र अंतर नहीं है। दरअसल, स्लैश डॉस (साथ ही बैकस्लाश) द्वारा स्वीकार किए जाते हैं - लेकिन cmd.exe कमांड दुभाषिया द्वारा नहीं। –

+0

बूस्ट व्यावहारिक रूप से सी ++ मानक पुस्तकालय है। यह सिर्फ "पूरी" लाइब्रेरी नहीं है। – rlbond

1

आपके द्वारा पूछे जाने वाले कार्यों को करने का एक आसान तरीका एक छोटा (संभवतः इनलाइन) फ़ंक्शन है जो प्लेटफ़ॉर्म (#ifdef WIN32 इत्यादि) निर्धारित करने के लिए प्रीप्रोसेसर जादू का उपयोग करता है और उचित डेलीमीटर चरित्र देता है।

उत्तर थोड़ा और जटिल है क्योंकि डेलीमीटर चरित्र से अन्य महत्वपूर्ण अंतर हैं। विंडोज फाइल सिस्टम में कई जड़ें हो सकती हैं (सी: \, डी: \, आदि), जबकि संपूर्ण एफएस यूनिक्स-भूमि में/रूट पर है।

boost::filesystem का उपयोग करने के लिए सबसे अच्छी सलाह हो सकती है।

2

आंतरिक रूप से हर जगह '/' का उपयोग करें। फिर उपयोगिता कार्यों का एक सेट लिखें जो '/' का उपयोग करने के लिए किसी भी रूप का पथ आयात करता है। एक 'मूल पथ' फ़ंक्शन लिखें जिसमें सिस्टम विशिष्ट ifdefs और आवश्यक रूपांतरण हैं। जिसे मांग पर बुलाया जा सकता है।