如何复制ifstream的状态?

时间:2015-12-02 04:05:24

标签: c++ ifstream

我有一个带ifstream,ifs的函数,并用它来填充:     的std ::矢量< std :: vector>矩阵;  (这是一项任务,我对如何更好地实现这一点没有任何发言权)。 在开始填写“矩阵”之前,我想知道我正在阅读的文件的长度 这样,我会避免不断调整大小。但是,我只有一个ifstream对象,ifs。如果我使用循环来查找文件的长度,我将在文件的末尾,我不确定如何“刷新”ifstream,以便它再次位于第一行。 我正在考虑的其他事情是创建一个ifs的副本。这样,我可以遍历一个ifstream,关闭它,并使用另一个来获取数据。 我觉得有两个ifstreams打开并指向同一个文件会出现问题。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

ifs.seekg(0);

如果在搜索之前到达流的末尾,则另一个问题是流在内部记住文件结束并且seekg不会重置它。为此,请使用

ifs.clear();

在寻找之前。