You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:39:03