fopen

2010-02-01 11 views
46

में आर और आरबी के बीच अंतर क्या है मैंने सी में फॉपेन का उपयोग करने की कोशिश की, दूसरा पैरामीटर ओपन मोड है। दो मोड "आर" और "आरबी" मुझे बहुत भ्रमित करते हैं। ऐसा लगता है कि वे वही हैं। लेकिन कभी-कभी "आरबी" का उपयोग करना बेहतर होता है। तो, "आर" क्यों मौजूद है? विस्तार से या उदाहरणों के साथ मुझे यह समझाएं। धन्यवाद।fopen

+0

बाइनरी http://c-faq.com/stdio/textvsbinary.html – Terrance

उत्तर

59

आपको टेक्स्ट फ़ाइलों को खोलने के लिए "r" का उपयोग करना चाहिए। विभिन्न ऑपरेटिंग सिस्टमों में टेक्स्ट संग्रह करने के कुछ अलग तरीके हैं, और यह सही अनुवाद करेगा ताकि आपको स्थानीय ऑपरेटिंग सिस्टम की मूर्खता के बारे में जानने की आवश्यकता न हो। उदाहरण के लिए, आपको पता चलेगा कि कोड कहां चलती है, इस पर ध्यान दिए बिना, नईलाइन हमेशा एक सरल "\n" के रूप में दिखाई देगी।

यदि आप गैर-पाठ फ़ाइलों को खोल रहे हैं, तो आपको "rb" का उपयोग करना चाहिए, क्योंकि इस मामले में, अनुवाद उचित नहीं हैं।

+2

पढ़ें और पढ़ें यह प्लेटफ़ॉर्म-निर्भर है। यूनिक्स पर, टेक्स्ट-मोड कुछ खास नहीं करता है, इसलिए यह अभी भी '\ r \ n' को' \ n' के रूप में संभाल नहीं पाएगा। –

+0

विचार यह है कि '" r "' उसी सिस्टम पर "टेक्स्ट फ़ाइल" को सही तरीके से खोल देगा। यदि आप लिनक्स पर "आर" के साथ एक विंडोज़ टेक्स्ट फ़ाइल खोल रहे हैं, तो आपको निश्चित रूप से अलग-अलग लाइन समापन सम्मेलनों का ख्याल रखना होगा। –

+0

यदि आप लिनक्स सिस्टम पर विंडोज में लिखी गई फाइल खोलते हैं, तो आप व्यवहार देखेंगे। आपको फ़ाइल को यूनिक्स टेक्स्ट फ़ाइल में कनवर्ट करने की आवश्यकता है। फ़ाइल को खोलने के बाद, आप 'dos2unix' नामक प्रोग्राम के साथ आसानी से ऐसा कर सकते हैं, या vim में टाइप करें, टाइप करें,': se ff = unix', हिट रिटर्न, और फिर सेव करें। –

6

बाइनरी फ़ाइल खोलने के लिए "आरबी" का उपयोग करें। फिर फ़ाइल के बाइट्स एनकोड नहीं किया जाएगा जब आप पढ़ सकते हैं उन्हें

6
  • "आर" Translated mode
  • "rb" के लिए "आरटी" रूप में ही है गैर अनुवाद मोड है।

यह कम से कम विंडोज पर एक फर्क पड़ता है। विवरण के लिए वह लिंक देखें।

+2

'" आरटी "' गैर-मानक है। –

23

लिनक्स पर, और सामान्य रूप से यूनिक्स, "r" और "rb" समान हैं। अधिक विशेष रूप से, पॉइंटर fopen() द्वारा पाठ मोड में फ़ाइल में डालने और बाइनरी मोड में यूनिक्स पर समान तरीके से व्यवहार करता है। विंडोज़ पर, और सामान्य रूप से, सिस्टम पर जो "newlines" का प्रतिनिधित्व करने के लिए एक से अधिक वर्णों का उपयोग करते हैं, पाठ मोड में खोला गया फ़ाइल व्यवहार करता है जैसे कि ये सभी वर्ण केवल एक वर्ण हैं, '\n'

यदि आप किसी भी सिस्टम पर टेक्स्ट फ़ाइलों को पोर्टेबल रूप से पढ़ना/लिखना चाहते हैं, तो , और "w"fopen() में उपयोग करें। यह गारंटी देगा कि फाइलें लिखी और ठीक से पढ़ी गई हैं। यदि आप बाइनरी फ़ाइल खोल रहे हैं, तो "rb" और "wb" का उपयोग करें, ताकि दुर्भाग्यपूर्ण न्यूलाइन-अनुवाद आपके डेटा को गड़बड़ न करे।

ध्यान दें कि आपके लिए न्यूलाइन अनुवाद करने वाली अंतर्निहित प्रणाली का नतीजा यह है कि आप fseek(file, 0, SEEK_END) का उपयोग करके फ़ाइल से पढ़ सकते बाइट्स की संख्या निर्धारित नहीं कर सकते हैं।

अंत में, पर comp.lang.c FAQs पर देखें।

1

अधिकांश पॉज़िक्स सिस्टम पर, इसे अनदेखा किया जाता है। लेकिन, सुनिश्चित करने के लिए अपने सिस्टम की जांच करें।

XNU

मोड स्ट्रिंग भी पत्र 'बी' या तो के रूप में अंतिम वर्ण या दो चरित्र ऊपर वर्णित तार में से किसी में पात्रों के बीच एक चरित्र के रूप में शामिल कर सकते हैं। यह आईएसओ/आईईसी 98 99: 1 99 0 ('आईएसओ सी 0 9') के साथ संगतता के लिए सख्ती से है और इसका कोई प्रभाव नहीं है; 'बी' को नजरअंदाज कर दिया जाता है।

लिनक्स

मोड स्ट्रिंग भी पत्र 'बी' या तो एक आखिरी चरित्र के रूप में या दो चरित्र ऊपर वर्णित तार में से किसी में पात्रों के बीच एक चरित्र के रूप में शामिल कर सकते हैं। यह सख्ती से सी 8 9 के साथ संगतता के लिए है और इसका कोई प्रभाव नहीं है; लिनक्स समेत सभी पॉज़िक्स अनुरूप प्रणाली पर 'बी' को अनदेखा किया जाता है। (अन्य सिस्टम टेक्स्ट फ़ाइलों और बाइनरी फ़ाइलों को अलग-अलग इलाज कर सकते हैं, और 'बी' जोड़ना अच्छा विचार हो सकता है यदि आप बाइनरी फ़ाइल में I/O करते हैं और उम्मीद करते हैं कि आपका प्रोग्राम गैर-यूनिक्स वातावरण में पोर्ट किया जा सकता है।)

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