2011-09-04 12 views
6

मुझे C++ में किसी फ़ाइल में कुछ डेटा ओवरराइट करने में समस्या हो रही है। कोड मैं का उपयोग कर रहा हूँसी ++ किसी विशेष स्थिति में फ़ाइल में ओवरराइटिंग डेटा

int main(){ 
    fstream fout; 
    fout.open("hello.txt",fstream::binary | fstream::out | fstream::app); 
    pos=fout.tellp(); 
    fout.seekp(pos+5); 
    fout.write("####",4); 
    fout.close(); 
    return 0; 

}

समस्या seekp उपयोग करने के बाद भी, डेटा हमेशा end.I पर लिखा है है एक विशेष स्थिति में यह लिखना चाहते है। और यदि मैं fstream :: ऐप नहीं जोड़ता, तो फ़ाइल की सामग्री मिटा दी जाती है। धन्यवाद।

+0

उस डेटा की सटीक स्थिति क्या है जिसे आप ओवरराइट करना चाहते हैं? – Flinsch

उत्तर

8

समस्या fstream::app के साथ है - यह फ़ाइल को खोलने के लिए खोलती है, जिसका अर्थ है कि सभी लिखने फ़ाइल के अंत में जाते हैं। सामग्री को मिटाने से बचने के लिए, fstream::in के साथ भी खोलने का प्रयास करें, जिसका अर्थ fstream::binary | fstream::out | fstream::in के साथ खुला है।

+0

लेकिन स्ट्रीम से पढ़ने के लिए fstream :: में नहीं है, मैं इसका उपयोग करके स्ट्रीम में कैसे लिख पाऊंगा? – karyboy

+2

यदि आप 'fstream :: in' और' fsteam :: out' दोनों का उपयोग करते हैं तो आप फ़ाइल को पढ़ने और लिखने के लिए खोल देंगे - जिसका अर्थ यह है कि पिछली सामग्री को हटाए बिना इसे लिखने के लिए खोला जाएगा। –

+0

Thanx दोस्त, आप एक उद्धारकर्ता ..... – karyboy

2

आप की तरह

fstream fout("hello.txt", fstream::in | fstream::out | fstream::binary); 
fout.seek(offset); 
fout.write("####", 4); 

fstream::app कुछ यह बताता है प्रत्येक उत्पादन ऑपरेशन से पहले फ़ाइल के अंत तक ले जाना चाहते हैं, तो भले ही आप स्पष्ट रूप से एक स्थिति के लिए प्रयास करते हैं, लिखने स्थान अंत करने के लिए मजबूर हो जाता है जब आप write() (वह seekp(0, ios_base::end); है) करते हैं।

सीएफ। http://www.cplusplus.com/reference/iostream/fstream/open/

ध्यान देने योग्य एक और बात यह है कि, चूंकि आपने fstream::app, tellp() के साथ फ़ाइल खोल दी है, तो फ़ाइल का अंत वापस करना चाहिए। तो seekp(pos + 5) फ़ाइल स्थिति के वर्तमान छोर से आगे बढ़ने की कोशिश कर रहा है।

+0

thnk आप भी यह इंगित करने के लिए आप .... अब सब कुछ इरादे के रूप में काम कर रहा है .. – karyboy

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