所以我有这段代码,非常简单:
struct Item{
int x;
};
int main(){
ofstream dat("file.bin", ios::binary);
Item chair;
for (int i = 0; i < 20; i++) {
chair.x = i;
dat.write((char*)&chair, sizeof(Item));
}
ifstream dat2("file.bin", ios::binary);
for (int i = 0; i < 20; i++) {
dat2.read((char*)&chair, sizeof(Item));
cout << chair.x << endl;
}
return 0; }
当我运行这段代码时,即使我总是将 chair.x 的值设置为 i,当我读取第二个 for 循环中的条目时,读取的每个 .x 值都是 19。这是结果,因为我不擅长解释:
最佳答案
我明白了,你正在读写同一个文件;你为什么不flush或 close再次读取文件之前的流。参见 A good explanation to buffering in streams
int main(){
ofstream dat("file.bin", ios::binary);
Item chair;
for (int i = 0; i < 20; i++) {
chair.x = i;
dat.write((char*)&chair, sizeof(Item));
}
dat.flush(); //Add this here
//dat.close(); //or this
ifstream dat2("file.bin", ios::binary);
for (int i = 0; i < 20; i++) {
dat2.read((char*)&chair, sizeof(Item));
cout << chair.x << endl;
}
return 0;
}
关于C++二进制文件 - 一遍又一遍地写入相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910888/