簡體   English   中英

將客戶數據存儲到C ++中的二進制文件中

[英]Store customer data into a binary file in c++

我正在用C ++創建銀行系統。 我已經創建了所有功能,例如存款,提款。不同的帳戶類型:保存和當前。 但是不知道如何將數據存儲在二進制文件中。 我也希望在一個會話中輸入的數據必須存在,以便在另一個會話中使用。 你能建議我一些方法嗎?

第一:為什么要二進制? 二進制文件通常不是一個好主意。

如果必須為二進制,則必須首先定義二進制格式:如何表示文件中的每種類型。 二進制不代表格式化。 除非有很好的理由,否則您可能會從已經定義的格式開始,例如XDR。 然后,您可能應該定義用於讀取和寫入此格式的流類型std::istreamstd::ostream的輸入和輸出函數使用文本格式或未格式化(這意味着您必須手動格式化或取消格式化數據)給予或接受)。 但是,讓這些類從std::basic_ios<char>派生可能是一個好主意。 它有很多多余的東西(例如格式標志),但是將提供或多或少的標准錯誤報告機制。 您可以(可能應該)使用標准的streambuf ,只需確保使用filebuf ,文件將以二進制模式打開,並且filebuf本身將充滿"C"語言環境。

或者,您可以將其格式化為std::vector<unsigned char> ,並使用系統級函數進行編寫。 實際上,您可能必須執行此操作,因為無法使filebuf具有事務安全性。 如果這是真實的銀行應用程序,而不是正常的工作, 必須這樣做,因為真實的銀行應用程序確實需要事務完整性:您必須使用特殊參數打開文件,以確保不從寫入返回直到數據實際在磁盤上為止。 而且沒有標准流支持此功能。

似乎您要嘗試的實際上是序列化。 Boost.SerializationProtocol Buffers是執行此操作的良好庫。

Boost.Serialization是一個復雜的怪物,需要考慮很多注意事項,但是對於您的簡單情況,它應該很容易做到。 從維護的角度來看,協議緩沖區需要做更多的工作(您必須維護一個.proto文件,該文件描述了所保存內容的格式)。

我可以在這里詳細介紹每個庫的工作原理,但是我建議您查看文檔以了解最適合的庫。 就我個人而言,我過去經常使用Boost.Serialization,但是由於所有警告,我轉移到了協議緩沖區(這也是因為我使用它在Java和C ++之間傳輸對象)。

使用這些庫,您可以輕松地以二進制格式保存對象,而不必擔心細節。 稍后,您還可以輕松切換到XML或文本輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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