这是我的代码

#include <iostream>
#include <fstream>

using namespace std;

struct a
{
    int x;
    int b;
};

int main ()
{

ifstream rfile("test.bin", ios::binary);
a ob;

//Reading from the file for the first time works fine.
rfile.read((char*)&ob, sizeof(ob));
while (rfile)
{
    cout<<ob.x<<endl;
    rfile.read((char*)&ob, sizeof(ob));
}
rfile.seekg(0, ios::beg);

cout<<"G:"<<rfile.tellg()<<endl; //Outputs -1
rfile.read((char*)&ob, sizeof(ob));
while (rfile)
{
    cout<<ob.x<<endl;
    rfile.read((char*)&ob, sizeof(ob));
}


return 0;
}


输出是

3
1
G:-1


与第一个循环和第二个循环的有效对象一样,因为即使在使用seekg()之后,指针的位置也为-1。为什么会这样呢?

最佳答案

ifstream在第一个while循环之后处于无效状态,您需要在对流进行任何进一步操作之前重置流状态标志。

    rfile.read((char*)&ob, sizeof(ob));
}
rfile.clear();
rfile.seekg(0, ios::beg);


代替

    rfile.read((char*)&ob, sizeof(ob));
}
rfile.seekg(0, ios::beg);

关于c++ - 二进制文件不能多次使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18965047/

10-11 23:17