以下代码仅将文件打印一次:
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, const char *argv[])
{
ifstream infile;
infile.open("in", ios::binary);
char c;
while (infile.get(c))
{
cout << c;
}
infile.seekg(0, ios::beg);
infile.clear();
while (infile.get(c))
{
cout << c;
}
infile.close();
return 0;
}
我认为这与遍历文件后的eof标志有关,但我不知道如何解决。
干杯。
最佳答案
您的代码有几个问题:
首先,在使用前,请不要检查infile.get()
是否成功
结果。而且您正在使用infile.good()
进行控制
一个循环,用infile.eof()
控制另一个循环:infile.eof()
直到您知道输入失败,该命令才有用infile.good()
从未真正有用。只需将while( infile.get( c ) )
用于两个循环。
其次,正如您所说,您永远不会重置导致您的“错误”
完成第一个循环。遇到结束时
文件(且infile.get( c )
失败),您需要调用infile.clear()
,然后再执行其他操作。
最后,当然,您无法检查自己是否成功
打开文件,以及seekg
是否成功。你呢
通常不必关闭输入文件;它将关闭
超出范围时自动显示。 (另一方面,
您应该关闭或刷新std::cout
,并验证
之后还是可以的。失败时返回0
将所有数据写入我的书中是一个严重错误。)
关于c++ - 使用file.seekg()遇到困难(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14881883/