簡體   English   中英

使用結構讀取和寫入二進制文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM