下面的內容去掉地23,24行才能顯示出後面插入的"abc"字符,道理是啥啊?調試一天了。
23: myStream.getline(buffer,100);
24:cout<<"before insert:"<<buffer<<endl;
環境:windows 7 64位;gcc 4.7.2;codeblcoks 16.01
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char fileName[15]="test01.txt";
ofstream fout(fileName);
fout.close();
fstream myStream(fileName,ios::in|ios::out);
if(!myStream.is_open())
{
cout<<"fail to open the file"<<endl;
return 0;
}
myStream<<"123";
myStream<<"xyz";
myStream.seekg(0);
char buffer[100]= {0};
myStream.getline(buffer,100);
cout<<"before insert:"<<buffer<<endl;
myStream<<"abc";
myStream.seekg(0);
myStream.getline(buffer,100);
cout<<"after insert:"<<buffer<<endl;
}
在執行完23行之後,myStream到文件尾了,eof標識符為1,就不會繼續做文件讀寫操作了。
解決方案:在myStream>>"abc"
前加上如下代碼:
if(myStream.eof()){
myStream.clear();
}
clear用於清除狀態碼,這樣就可以正常讀寫,而讀寫指針被放在尾部(因為前一步getline時指針移到了末尾)。
如果你需要在文件頭部插入,還需要在clear後加上一句:
myStream.seekp(0);