我正在處理涉及二進制文件的項目。 所以我開始研究二進制文件,但我仍然對如何編寫和填寫從我之前寫的二進制文件的向量感到困惑寫入和讀取二進制文件以填充矢量 - 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] )' –