c++ - 写入和读取二进制文件以填充 vector - C++

标签 c++ vector binaryfiles

我正在从事一个涉及二进制文件的项目。 所以我开始研究二进制文件,但我仍然对如何从我之前编写的二进制文件编写和填充 vector 感到困惑

这是用于编写的代码。

void binario(){
ofstream fout("./Binario/Data.AFe", ios::out | ios::binary);
vector<int> enteros;
enteros.push_back(1);
enteros.push_back(2);
enteros.push_back(3);
enteros.push_back(4);
enteros.push_back(5);
//fout.open()
//if (fout.is_open()) {
    std::cout << "Entre al if" << '\n';
    //while (!fout.eof()) {
        std::cout << "Entre al while" << '\n';
        std::cout << "Enteros size: "<< enteros.size() << '\n';
        int size1 = enteros.size();
        for (int i = 0; i < enteros.size(); i++) {
            std::cout << "for " << i << '\n';
            fout.write((char*)&size1, 4);
            fout.write((char*)&enteros[i], size1 * sizeof(enteros));
            //cout<< fout.get(entero[i])<<endl;
        }
        //fout.close();
    //}
    fout.close();
    cout<<"copiado con exito"<<endl;
//} 
}

阅读代码如下:

oid leerBinario(){
vector<int> list2;

ifstream is("./Binario/Data.AFe", ios::binary);
    int size2;
    is.read((char*)&size2, 4);
    list2.resize(size2);


    is.read((char*)&list2[0], size2 * sizeof(list2));

    std::cout << "Size del vector: " << list2.size() <<endl;
    for (int i = 0; i < list2.size(); i++) {
        std::cout << i << ". " << list2[i] << '\n';
    }
    std::cout << "Antes de cerrar" << '\n';
    is.close();
}

我不知道我是否正确地写入文件,这只是一个测试,所以我不会弄乱我的主文件,而不是写数字我需要保存存储在 vector 中的对象和每次用户运行程序时加载它们。

最佳答案

不,你有点困惑。您在每次迭代中都写了大小,然后当您尝试写值时,您正在做一些完全未定义的事情。当您使用 vector 时,您实际上可以在没有循环的情况下执行此操作。

fout.write(&size1, sizeof(size1));
fout.write(enteros.data(), size1 * sizeof(int));

读入:

is.read(&list2[0], size2 * sizeof(int));

为了更便携,您可能希望使用不会更改的数据类型(例如,当您从 32 位编译切换到 64 位时)。在这种情况下,使用来自 <cctype> 的东西-- 例如int32_t大小和值(value)数据。

关于c++ - 写入和读取二进制文件以填充 vector - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42686472/

相关文章:

c++:如何为结合了指针的 vector 编写析构函数

performance - 为什么在 Racket 中的 gvector 中保留容量会使性能变差?

erlang - 在 Erlang 中写入随机访问文件

使用 gcc 创建一个固定大小的部分并在其中放置值

c++ - 为什么我不能在同一个文件中定义已经前向声明的成员函数?

c++ - 模板函数特化,C++

c++ - 为什么 C 和 C++ 中 ` struct T{ double x};` 的输出不同?

c++ - 智能指针和 vector C++ 的多态性问题

c++ - 获取二进制指令的内存地址

c++ - 给定一个数 N,有多少对数的平方和小于或等于 N?