我有一个带ifstream,ifs的函数,并用它来填充: 的std ::矢量< std :: vector>矩阵; (这是一项任务,我对如何更好地实现这一点没有任何发言权)。 在开始填写“矩阵”之前,我想知道我正在阅读的文件的长度 这样,我会避免不断调整大小。但是,我只有一个ifstream对象,ifs。如果我使用循环来查找文件的长度,我将在文件的末尾,我不确定如何“刷新”ifstream,以便它再次位于第一行。 我正在考虑的其他事情是创建一个ifs的副本。这样,我可以遍历一个ifstream,关闭它,并使用另一个来获取数据。 我觉得有两个ifstreams打开并指向同一个文件会出现问题。
我不知道实现这两种想法的方法。请假设我无法再访问原始文件名/路径。
有什么想法吗?
答案 0 :(得分:1)
不要尝试复制流 要跳到开头,只需使用seekg:
ifs.seekg(0);
如果在搜索之前到达流的末尾,则另一个问题是流在内部记住文件结束并且seekg不会重置它。为此,请使用
ifs.clear();
在寻找之前。