2010-05-06 17 views
8

पर 1 अतिरिक्त चरित्र मिला है जब भी मैं fstream द्वारा पढ़ता हूं मुझे अंत में 1 अतिरिक्त चरित्र मिल जाता है, मैं इससे कैसे बच सकता हूं?सी ++: हर बार जब मैं fstream द्वारा पढ़ता हूं तो मुझे

संपादित करें:

ifstream readfile(inputFile); 
ofstream writefile(outputFile); 
char c; 
while(!readfile.eof()){ 
     readfile >> c; 
     //c = shiftChar(c, RIGHT, shift); 
     writefile << c; 
} 
readfile.close(); 
writefile.close(); 
+3

पोस्ट कोड है कि समस्या का कारण बनता है:

यदि हां, तो मैं कुछ इस तरह की कोशिश होगी। मुझे लगता है कि आपने फ़ाइल को फ़ाइल (बाइनरी के बजाए) मोड में खोला है और इसे पढ़ने() के साथ पढ़ने की कोशिश कर रहा है, लेकिन कौन जानता है। –

+0

वास्तविक कोड मदद करेगा। क्या यह न्यूलाइन कैरेक्टर ('\ n') हो सकता है? – Dima

+1

क्षमा करें दोस्तों, बस मेरी पोस्ट अपडेट करें –

उत्तर

6

यह आमतौर पर फ़ाइल के अंत गलत तरीके से के लिए परीक्षण का परिणाम है।

while (infile>>variable) ... 

या:

while (std::getline(infile, whatever)) ... 

लेकिन नहीं:

while (infile.good()) ... 

या:

while (!infile.eof()) ... 

संपादित करें: आप आम तौर पर की तरह कुछ करना चाहता हूँ पहले दो एक कर पढ़ें, जांचें कि यह असफल रहा है, और यदि ऐसा है तो बाहर निकलें पाश। उत्तरार्द्ध दो पढ़ने का प्रयास करते हैं, "पढ़ा" क्या प्रक्रिया करते हैं, और फिर पिछले प्रयास विफल होने पर अगले पुनरावृत्ति पर लूप से बाहर निकलें।

EDIT2: आसानी से एक से दूसरे फ़ाइल की प्रतिलिपि करने, कुछ इस तरह का उपयोग करें:

// open the files: 
ifstream readfile(inputFile); 
ofstream writefile(outputFile); 

// do the copy: 
writefile << readfile.rdbuf(); 
+0

क्या आप समझा सकते हैं कि आखिरी 2 गलत क्यों हैं? –

+0

कमाल !! जो समस्या को हल करता है। यू विस्तृत हो सकता है कि क्यों '.eof() 'एक अच्छा विचार नहीं है? –

+0

अपना पहला संपादन देखें। –

0

कोड के आधार पर, यह प्रतीत होता है कि आप क्या करने की कोशिश कर रहे हैं एक से दूसरे फ़ाइल की सामग्री की प्रतिलिपि है ?

ifstream fin(inputFile, ios::binary); 

fin.seekg(0, ios::end); 
long fileSize = fin.tellg(); 
fin.seekg(0, ios::beg); 

char *pBuff = new char[fileSize]; 
fin.read(pBuff, fileSize); 
fin.close(); 

ofstream fout(outputFile, ios::binary) 
fout.write(pBuff, fileSize); 
fout.close; 
delete [] pBuff; 
संबंधित मुद्दे