[英]Reading and writing binary files using structures
我正在嘗試從二進制文件中讀取並將信息轉儲到一個結構中。 在我讀取它之前,我從結構向量寫入文件。 不幸的是,我無法獲得新結構以從文件中接收信息。
我試過在向量和單個結構之間切換。 還嘗試弄亂文件指針,來回移動它並保持原樣,看看這是否是問題所在。 使用向量是因為它應該采用無限值。 還允許我在查找文件中的特定結構時測試輸出應該是什么樣子。
struct Department{
string departmentName;
string departmentHead;
int departmentID;
double departmentSalary;
};
int main()
{
//...
vector<Employee> emp;
vector<Department> dept;
vector<int> empID;
vector<int> deptID;
if(response==1){
addDepartment(dept, deptID);
fstream output_file("departments.dat", ios::in|ios::out|ios::binary);
output_file.write(reinterpret_cast<char *>(&dept[counter-1]), sizeof(dept[counter-1]));
output_file.close();
}
else if(response==2){
addEmployee(emp, dept, empID);
}
else if(response==3){
Department master;
int size=dept.size();
int index;
cout << "Which record to EDIT:\n";
cout << "Please choose one of the following... 1"<< " to " << size << " : ";
cin >> index;
fstream input_file("departments.dat", ios::in|ios::out|ios::binary);
input_file.seekg((index-1) * sizeof(master), ios::beg);
input_file.read(reinterpret_cast<char *>(&master), sizeof(master));
input_file.close();
cout<< "\n" << master.departmentName;
}
else if(response==4){
}
//...
文件是字節流。 如果您想將某些內容寫入文件並可靠地將其讀回,則需要在字節級別定義文件的內容。 查看一些二進制文件格式(如 GIF)的規范,看看這樣的規范是什么樣的。 然后編寫代碼以在您的類實例和一大塊字節之間進行轉換。
否則,它會被擊中或錯過,而且經常會錯過。 將“序列化 C++”打入您最喜歡的搜索引擎,以獲取有關如何執行此操作的許多想法。
由於明顯的原因,您的代碼可能無法運行。 一個string
可以包含一百萬字節的數據。 但是您只是將sizeof(string)
字節寫入文件。 所以你沒有寫任何讀者可以理解的東西。
假設sizeof(string)
在您的平台上為 32,但departmentHead
超過 32 個字節。 文件的內容怎么可能是正確的? 此代碼不會嘗試將數據序列化為適合寫入文件的字節流,該文件是……字節流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.