C++二进制文件 - 一遍又一遍地写入相同的数字

标签 c++ binaryfiles

所以我有这段代码,非常简单:

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。这是结果,因为我不擅长解释:

Code result 但是它应该是 0、1、2、... 19。我哪里弄错了?

最佳答案

我明白了,你正在读写同一个文件;你为什么不flushclose再次读取文件之前的流。参见 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/

相关文章:

c++ - 如果没有显式限定名称,如何调用纯虚函数?

c++ - mem_fun 和 bind1st 问题

C++:在两个不同的类中重载相同的运算符时出现问题

python - 有效地将二进制数据嵌入脚本

c++ - 如何在C++中以二进制方式将列表容器写入文件

c++ - 如何将带有自定义分配器的 std::vector 传递给需要带有 std::allocator 的函数?

c++ - 如何将 Python dict 转换为 Pybind11 中的 C++ 计数器部分?

c - 将二进制读入字符串c

c++ - 在 C++ 11 中定义二进制文件的结构

c++ - 如何在 C++ 中读取二进制文件中的数组