2010-12-01 39 views
5

मैंने बाइनरी मोड में एक फ़ाइल खोली और फ़ाइल को लिखना पसंद किया।क्या स्ट्रीम के बीच का अंतर "<<" और लिखें

ofstream ofile("file.txt",ios_base::binary) 
    int a = 1; 
    float f = 0.1; 
    string str = 10; 
    ofile<<a<<f<<str; 

की तरह क्या लेखन के बीच अंतर का उपयोग कर "< <" और "ofile.write" का उपयोग कर पता करने के लिए। जो द्विआधारी मोड में लिखने के लिए सबसे अच्छा और प्रभावी है।

+1

यह एक है डेटा आउटपुट आम तौर पर पसंद किया जाता है कुल अनुमान है, लेकिन मैं 'ऑपरेटर <<' 'लिखना()' – Falmarri

उत्तर

5

ऑपरेटर < < आपके डेटा को टेक्स्ट के रूप में प्रारूपित करेगा। जबकि लिखना आउटपुट डेटा उसी प्रारूप में होगा जैसा कि यह राम में संग्रहीत है। इसलिए, यदि आप बाइनरी फाइलें लिख रहे हैं, तो आप लेखन का उपयोग करना चाहते हैं।

हालांकि, यदि आप गैर-पॉड प्रकार लिख रहे हैं, तो आपको सावधान रहना होगा। तुम सिर्फ यह नहीं कह सकते:

write(&mystring, sizeof(std::string)); 

आप वास्तविक डेटा है, जो कक्षा में संग्रहीत नहीं है उत्पादन के लिए कोई रास्ता नहीं है या खुद struct की जरूरत है।

+0

का उपयोग करके लागू किया गया है, मुझे संदेह है कि इसे 'लिखना चाहिए (और mystring, mystring.size()) ' – Dilawar

+0

@ डिलावर: नहीं, यह और भी गलत है। वर्ण डेटा स्ट्रिंग ऑब्जेक्ट में ही संग्रहीत नहीं होता है। यह गतिशील रूप से अलग से आवंटित किया जाता है और एक सूचक द्वारा संदर्भित किया जाता है। आप 'mystring.c_str()' का उपयोग कर सकते हैं, लेकिन अगर आप इसे सही तरीके से पुनर्प्राप्त करने में सक्षम होना चाहते हैं तो आपको आकार को किसी भी तरह से स्टोर करने की आवश्यकता है। –

1

AFAIK लिखने के मूल्य 'जैसा है' पास करता है जहां ऑपरेटर < < कुछ स्वरूपण करता है।

अधिक देखें here इसमें कुछ विशेषताओं को सूचीबद्ध करने वाले बुलेट पॉइंट हैं।

उल्लेख किया है बाइनरी डेटा के लिए, है लिखने का उपयोग करने के रूप में यह सिर्फ बिना किसी भी स्वरूपण (जो अतिरिक्त स्वरूपण के रूप में बाइनरी डेटा के लिए बहुत महत्वपूर्ण है प्रारूप अमान्य हो सकती है)

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