我正在处理涉及二进制文件的项目。 所以我开始研究二进制文件,但我仍然对如何编写和填写从我之前写的二进制文件的向量感到困惑写入和读取二进制文件以填充矢量 - C++
这是代码:写作。
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();
}
如果我写正确的文件,我不知道,这只是测试,所以我不要弄乱我的主要文件,而不是编写数字,我需要保存存储在向量中的对象,并在用户每次运行程序时加载它们。
回读您编写的文件并获得与您所写的相同的值将是您是否正确写入文件的一个很好的测试。 –
我不明白为什么你为每个单独的向量元素编写'enteros.size()'而不是只写一次。当你写'enteros [i]''你肯定不需要'enteros.size()* sizeof(enteros)'因为这是整个向量中字节的5倍 - 你可能需要'sizeof(enteros [i] )' –