C ++二进制文件 - 一遍又一遍地写入相同的数字
C++ Binary file - Same number written over and over
所以我有这段代码,非常简单:
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。这是结果,因为我不善于解释:
但是它应该是 0、1、2、... 19。我哪里弄错了?
我知道了,你正在读写同一个文件;你为什么不 flush or close the stream before reading the file again. See 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;
}
所以我有这段代码,非常简单:
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 or close the stream before reading the file again. See 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;
}