C++读取文件到末尾后如何重新从第一行开始读取
C++读取文件到末尾后重新从首行读取的解决方法
核心原理
当文件流读取到文件末尾时,会自动触发eofbit(文件末尾标志)和failbit(读取失败标志),此时文件流处于不可用状态,必须先清除错误标志,再重置读指针位置才能重新读取。
具体操作步骤
- 第一步:调用文件流的
clear()方法,清除所有错误状态标志 - 第二步:调用
seekg(0, ios::beg)方法,将读指针偏移到文件的起始位置(0代表偏移量,ios::beg代表从文件开头开始计算偏移)
修改后的示例代码
你可以在原有代码的读取逻辑结束后,插入上面两行代码即可实现重读,以下是完整示例:
#include <iostream> #include <string> #include <fstream> using namespace std; int main() { int num = 0; string doc[100]; ifstream inFile; ofstream outFile; inFile.open("hi.txt"); outFile.open("output.txt"); // 第一遍读取文件 while (num < 100 && getline(inFile, doc[num])) // 优化判断逻辑,读取失败自动退出循环 { outFile << doc[num] << endl; num++; } cout << "第一遍读取完成,共读取" << num << "行内容" << endl; // ====== 重新读取文件的核心操作 ====== inFile.clear(); // 清除流的错误标志 inFile.seekg(0, ios::beg); // 读指针移动到文件开头 // 第二遍读取文件验证重读效果 num = 0; cout << "开始第二遍读取:" << endl; while (num < 100 && getline(inFile, doc[num])) { cout << doc[num] << endl; num++; } inFile.close(); outFile.close(); return 0; }
补充说明
- 如果你已经调用了
close()关闭了输入文件流,也可以直接再次调用open("hi.txt")重新打开文件,效果和上述方法一致,只是反复开关文件的性能会稍差一点。 - 建议读取文件时把读取操作的返回值作为循环判断条件,就像示例代码里的
while (getline(inFile, doc[num])),这样读到文件末尾就会自动退出循环,不会做多余的空读取操作。
内容的提问来源于stack exchange,提问作者Nino
相关产品推荐
相关产品推荐

