[英]Store customer data into a binary file in c++
我正在用C ++創建銀行系統。 我已經創建了所有功能,例如存款,提款。不同的帳戶類型:保存和當前。 但是不知道如何將數據存儲在二進制文件中。 我也希望在一個會話中輸入的數據必須存在,以便在另一個會話中使用。 你能建議我一些方法嗎?
第一:為什么要二進制? 二進制文件通常不是一個好主意。
如果必須為二進制,則必須首先定義二進制格式:如何表示文件中的每種類型。 二進制不代表格式化。 除非有很好的理由,否則您可能會從已經定義的格式開始,例如XDR。 然后,您可能應該定義用於讀取和寫入此格式的流類型std::istream
和std::ostream
的輸入和輸出函數使用文本格式或未格式化(這意味着您必須手動格式化或取消格式化數據)給予或接受)。 但是,讓這些類從std::basic_ios<char>
派生可能是一個好主意。 它有很多多余的東西(例如格式標志),但是將提供或多或少的標准錯誤報告機制。 您可以(可能應該)使用標准的streambuf
,只需確保使用filebuf
,文件將以二進制模式打開,並且filebuf
本身將充滿"C"
語言環境。
或者,您可以將其格式化為std::vector<unsigned char>
,並使用系統級函數進行編寫。 實際上,您可能必須執行此操作,因為無法使filebuf
具有事務安全性。 如果這是真實的銀行應用程序,而不是正常的工作, 則必須這樣做,因為真實的銀行應用程序確實需要事務完整性:您必須使用特殊參數打開文件,以確保不從寫入返回直到數據實際在磁盤上為止。 而且沒有標准流支持此功能。
似乎您要嘗試的實際上是序列化。 Boost.Serialization或Protocol Buffers是執行此操作的良好庫。
Boost.Serialization是一個復雜的怪物,需要考慮很多注意事項,但是對於您的簡單情況,它應該很容易做到。 從維護的角度來看,協議緩沖區需要做更多的工作(您必須維護一個.proto文件,該文件描述了所保存內容的格式)。
我可以在這里詳細介紹每個庫的工作原理,但是我建議您查看文檔以了解最適合的庫。 就我個人而言,我過去經常使用Boost.Serialization,但是由於所有警告,我轉移到了協議緩沖區(這也是因為我使用它在Java和C ++之間傳輸對象)。
使用這些庫,您可以輕松地以二進制格式保存對象,而不必擔心細節。 稍后,您還可以輕松切換到XML或文本輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.