如何复制ifstream的状态

How can I copy the state of an ifstream?

本文关键字:ifstream 状态 复制 何复制      更新时间:2023-10-16

我有一个函数,它接受一个ifstream,ifs,并使用它来填充:std::vector<std::vector>矩阵;(这是一项任务,我对如何更好地实施这项任务没有任何发言权)。在我开始填写"矩阵"之前,我想知道我正在阅读的文件的长度这样,我将避免不断调整大小。然而,我只有一个ifstream对象,ifs。如果我使用循环来查找文件的长度,我将位于文件的末尾,并且我不确定如何"刷新"ifstream,使其再次位于第一行。我正在考虑的另一件事是创建一个if的副本。通过这种方式,我可以循环通过一个ifstream,关闭它,然后使用另一个来获取数据。我觉得打开两个ifstream并指向同一个文件会有问题。

我不知道如何实现这两个想法。请假设我无法再访问原始文件名/路径。

有什么想法吗?

不要试图复制流
要跳到开头,只需使用seekg:

ifs.seekg(0);

如果在搜索之前到达了流的末尾,另一个问题是流会在内部记住文件末尾,而seekg不会重置这一点。为此,请使用

ifs.clear();

在寻找之前。