2008-09-23 15 views
12

क्या कोई सी ++ जीएनयू स्टैंडअलोन कक्षाएं मौजूद हैं जो पथ पार मंच को संभालती हैं? मेरे अनुप्रयोग विंडोज और लिनक्स पर बनाते हैं। हमारी कॉन्फ़िगरेशन फ़ाइलें एक अलग फ़ाइल में एक अलग फ़ाइल में संदर्भित करती हैं। मैं अन्य कॉन्फ़िगरेशन फ़ाइल के लिए पथ को एक कक्षा में पढ़ने में सक्षम होना चाहता हूं जो लिनक्स या विंडोज दोनों पर काम करेगा।फ़ाइल पथों को संभालना क्रॉस प्लेटफ़ॉर्म

कौन सी कक्षा किसी भी प्रणाली पर उपयोग करने के लिए पथ का अनुवाद करने के लिए सबसे छोटा पदचिह्न प्रदान करेगी? धन्यवाद

उत्तर

9

जब तक आप पूर्ण पथ का उपयोग नहीं कर रहे हैं, तब तक अनुवाद करने की कोई आवश्यकता नहीं है - विंडोज स्वचालित रूप से बैकस्लाश में आगे की स्लैश को परिवर्तित करता है, इसलिए यदि आप आगे स्लैश पथ विभाजक के साथ सापेक्ष पथ का उपयोग करते हैं, तो आप सुनहरे होंगे। यदि संभव हो तो आपको वास्तव में पूर्ण पथ से बचना चाहिए।

+0

मेरे पास सरल आवश्यकता के लिए, यह सही है। – Superpolock

+1

ओएस के लिए अलग-अलग भागने, उद्धरण और डिलीमीटर नियमों के साथ पोर्टेबल नहीं है (उदा।, मैक) – jwfearn

13

बढ़ावा में boost::filesystem

+3

बूस्ट बहुत पूर्ण प्रतीत होता है, लेकिन मेरी मूलभूत आवश्यकताओं के लिए ओवरकिल। इनपुट के लिए धन्यवाद। – Superpolock

0

कई तरीके हैं, आईएमएचओ सही जवाब है कि पथ को छेड़छाड़ से बचने के लिए अपने प्रोग्राम को फिर से डिजाइन करना है। मैंने यहां एक उत्तर पोस्ट किया: https://stackoverflow.com/a/40980510/2345997 जो प्रासंगिक है।

तरीके:

  1. जो एक उपयोगकर्ता एक कॉन्फ़िग फ़ाइल से इसे पढ़ने के बजाय सवाल में पथ निर्दिष्ट करने की अनुमति देता एक कमांड लाइन विकल्प जोड़ें।
  2. एक कमांड लाइन विकल्प जोड़ें ताकि उपयोगकर्ता आधार पथ निर्दिष्ट कर सके। कॉन्फ़िगरेशन फ़ाइल में पथ इस आधार पथ के अंतर्गत स्थित के रूप में व्याख्या किए जाएंगे।
  3. अपनी कॉन्फ़िगरेशन फ़ाइल को तीन में विभाजित करें। एक फ़ाइल में क्रॉस प्लेटफ़ॉर्म कॉन्फ़िगरेशन होगा, दूसरी फ़ाइल में केवल विंडोज कॉन्फ़िगरेशन होगा और अंतिम फ़ाइल में लिनक्स केवल कॉन्फ़िगरेशन होगा। फिर उपयोगकर्ता विंडोज और लिनक्स दोनों के लिए सही पथ निर्दिष्ट कर सकता है। विंडोज़ पर आपका प्रोग्राम क्रॉस-प्लेटफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल और विंडोज़ केवल कॉन्फ़िगरेशन फ़ाइल पढ़ेगा। लिनक्स पर यह क्रॉस-प्लेटफ़ॉर्म फ़ाइल और लिनक्स केवल कॉन्फ़िगरेशन फ़ाइल पढ़ेगा।
  4. अपनी कॉन्फ़िगरेशन फ़ाइल पार्सिंग में प्रीप्रोसेसिंग जोड़ें। यह आपको एक कॉन्फ़िगरेशन फ़ाइल रखने की अनुमति देगा जहां उपयोगकर्ता आपके प्रोग्राम को फाइल में कुछ लाइनों को अनदेखा कर सकता है, इस पर निर्भर करता है कि कौन सा ओएस प्रोग्राम चल रहा है। इसलिए, उपयोगकर्ता फ़ाइल के पथ को दो बार निर्दिष्ट करने में सक्षम होंगे। एक बार लिनक्स के लिए, और एक बार विंडोज के लिए।
  5. डिज़ाइन बदलें ताकि फ़ाइलें हमेशा आपके निष्पादन योग्य के समान निर्देशिका में स्थित हों - तब उपयोगकर्ता केवल फाइलों के पथों की बजाय कॉन्फ़िगरेशन फ़ाइल में फ़ाइल नाम निर्दिष्ट करता है।
  6. एक साधारण फ़ंक्शन का उपयोग करें जो "/" से "\" स्विच करता है। फिर उपयोगकर्ता को दस्तावेज़ दें कि उन्हें पथ को लिनक्स पथ के रूप में निर्दिष्ट करना होगा और यह परिवर्तन विंडोज़ के लिए लागू किया जाएगा।
  7. इसके लिए अपना स्वयं का रास्ता मिनी-भाषा बनाएं और इसे उपयोगकर्ता को दस्तावेज़ दें। उदाहरण: "/" - एक निर्देशिका विभाजक निर्दिष्ट करता है, {root} - फाइल सिस्टम की रूट तक फैलता है, {cwd} - वर्तमान निर्देशिका में विस्तारित होता है, {app} - आपके आवेदन के पथ तक फैलता है ... फिर उपयोगकर्ता दोनों पथों पर फ़ाइल पथ निर्दिष्ट कर सकते हैं: {root} /myfiles/bob.txt।
  8. कुछ पथ दोनों प्लेटफार्मों पर काम करेंगे। उदा।: सापेक्ष पथ जैसे ../my फ़ाइलें/bill.txt। अपने पथ को केवल इन पथों के साथ काम करने के लिए प्रतिबंधित करें। इस सीमा को दस्तावेज करें और आपका एप्लिकेशन उपयोगकर्ता को पथ कैसे प्रबंधित करता है।
संबंधित मुद्दे