C++ ifstream 对象 "reseting"

标签 c++ file fstream

我有一个函数 func1(ifstream& fin),它多次调用 fin.getline() 从文件中读取数据。现在在这个 func1 中,我还调用了另一个函数 func2(ifstream&),它必须访问 func1 正在访问的同一文件。我可以简单地将 func2 称为 func2(fin)。

现在假设 func1 读取文件直到第 4 行,然后 func2 被调用并执行它的操作,读取文件直到第 7 行。现在问题是:一旦 funct2 返回到 func1,我想继续从 func1 离开的地方,即第 5 行读取文件,但这是不可能的,因为 fin 现在“指向”文件的第 8 行。

我已经尝试将 func2 定义为 func2(const ifstream&) 和 func2(const ifstream*) 或在 func1 中创建 fin 的拷贝并将其传递给 func2,但编译器不会接受这些选项中的任何一个。

我该怎么办?谢谢。

最佳答案

通常,如果您想“返回”,您可以使用 fstream::tellg() 告诉您当前所在的位置,并使用 fstream::seekg() 回到那个点。

我通常更喜欢的另一种选择是只读取一次行,并有一个行缓存/存储,其中包含足够的行,您可以在所需区域来回移动。假设文件不是绝对巨大,将所有行保存在一个 vector 中效果很好。如果文件有几千兆字节,那可能不是一个选项(在嵌入式设备上,即使是几兆字节也可能无法容纳所有文件),在这种情况下,您需要使用某种方法来“丢弃”您不再需要的东西.

关于C++ ifstream 对象 "reseting",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558706/

相关文章:

c++ - 可扩展的 UDP 服务器

python - 我想用最少的代码行从服务器检索多个日志

c++ - 如何使用 C++ 在 Windows 中复制和粘贴文件?

c++ - 无法在 C++ 中读取带有西里尔路径的文件

c++ - 确定不打开文件的确切原因

python - Eigen 矩阵 vs Numpy 数组乘法性能

c++ - 如何将其切换为 unique_ptr?

c++ - 如何在 Qt 项目 View 中为单个单元格设置委托(delegate)?

C - 创建/写入/读取命名管道

java - 替换 Zip 文件而不用 Java 解压缩