gpt4 book ai didi

c++ - 在 C++ 中使用 fstream 读取和追加文件

转载 作者:行者123 更新时间:2023-11-28 08:34:44 24 4
gpt4 key购买 nike

我正在尝试使用 fstream 读取文件。然后当我到达最后我 append 文件并写一些员工文件

abc

我写了示例代码

#include<iostream>
#include<fstream>
#include<queue>

using namespace std;
int main(int argc, char **argv){
fstream *binf;
binf=new fstream("t.txt", ios::out|ios::in|ios::app);
cout<<"EOF"<<EOF<<endl;
while(true){
cout<<"before peek"<<endl;
cout<<"binf->tellg:"<<binf->tellg()<<endl;
cout<<"binf->tellp:"<<binf->tellp()<<endl;
cout<<"binf->peek()::int=("<<(int)binf->peek()<<")::char=("<<(char)binf->peek()<<")"<<endl;
cout<<"after peek"<<endl;
cout<<"binf->tellg:"<<binf->tellg()<<endl;
cout<<"binf->tellp:"<<binf->tellp()<<endl;
char c;
if(binf->peek()==EOF){
cout<<"file is not good"<<endl;
break;
}
binf->get(c);
}
cout<<"binf->tellg:"<<binf->tellg()<<endl;
cout<<"binf->tellp:"<<binf->tellp()<<endl;
binf->seekg(3);
binf->seekp(3);
cout<<"binf->tellg:"<<binf->tellg()<<endl;
cout<<"binf->tellp:"<<binf->tellp()<<endl;
binf->put('H');
cout<<"binf->tellg:"<<binf->tellg()<<endl;
cout<<"binf->tellp:"<<binf->tellp()<<endl;
binf->seekg(4);
char c;
binf->get(c);
cout<<"c:"<<c<<endl;
binf->clear();
binf->close();
delete binf;
return 0;
}

这是我运行这段代码得到的输出

EOF-1
before peek
binf->tellg:0
binf->tellp:0
binf->peek()::int=(97)::char=(a)
after peek
binf->tellg:0
binf->tellp:0
before peek
binf->tellg:1
binf->tellp:1
binf->peek()::int=(98)::char=(b)
after peek
binf->tellg:1
binf->tellp:1
before peek
binf->tellg:2
binf->tellp:2
binf->peek()::int=(99)::char=(c)
after peek
binf->tellg:2
binf->tellp:2
before peek
binf->tellg:3
binf->tellp:3
binf->peek()::int=(10)::char=(
)
after peek
binf->tellg:3
binf->tellp:3
before peek
binf->tellg:4
binf->tellp:4
binf->peek()::int=(-1)::char=(ÿ)
after peek
binf->tellg:-1
binf->tellp:-1
file is not good
binf->tellg:-1
binf->tellp:-1
binf->tellg:-1
binf->tellp:-1
binf->tellg:-1
binf->tellp:-1
c:

我想做的就是修复文件并在最后写入但是,每当我在文件末尾看到 EOF 时,该文件就不再适合使用即使用 peek()

最佳答案

当您到达文件末尾时,您将 fstream 置于错误状态。当它处于错误状态时,除非您清除错误状态,否则什么都不会起作用。所以你需要这个

   if(binf->peek()==EOF){
cout<<"file is not good"<<endl;
binf->clear(); // clear the error state
break;
}

您不需要在关闭它之前清除 fstream,那什么都不做。

顺便说一句,很好的调试技术,但如果您学会使用适当的调试器,您会发现这更容易。

关于c++ - 在 C++ 中使用 fstream 读取和追加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com