以下是本人使用C++實現二進制文件隨機存取的兩種常用方法,寫出來,讓您見笑,還望方家點撥。
第一種方法:根據記錄編號,對每一條記錄固定位置存取,實現隨機存取
設計思想:
每一條記錄的記錄編號,決定該記錄的存取位置。如:第一條記錄記錄編號是1,放在位置1;第二條記錄的記錄編號是2,放在位置2;………,依次類推。
要修改第二條記錄,首先根據記錄編號計算出該記錄的存儲位置,然後將內置指針直接調至此處,進行修改。
新添記錄,可根據它的記錄編號存儲到文件的相應位置。
這種隨機存取方法通俗易懂,簡便易行。適用於記錄條數不多的文件,要求記錄編號盡可能連續。其缺點是存儲記錄不連續,占用空間大。
工程Random1演示了這種方法,建議您先演示工程,在對該工程有一個了解的基礎上再閱讀代碼。代碼中已經對與本文相關的語句作了詳細說明,您可以非常方便地讀懂。
第二種方法:利用鏈表指針,實現隨機操作
設計思想:
對文件進行操作前,先把文件讀入內存,做成鏈表以方便操作,操作完畢後存盤保存。
這種方法由於使用鏈表指針,對記錄的增加、刪減都非常方便。
這種方法不需要記錄編號,記錄存儲連續,占用空間小。其缺點是對程序設計人員要求較高,必須對鏈表指針有一定了解。
工程Random2演示了這種方法,同樣建議您先演示工程,在對該工程有一個了解的基礎上再閱讀代碼。
下面對該工程作幾點簡要說明:
工程新建了一個類CFileRandom實現文件的隨機操作。成員函數add用於增加一個記錄;change可以修改一個記錄;DescentSort實現降序排列;Display顯示所有記錄;Read把所有記錄調入內存;Remove用於刪除一條記錄;Save用於將內存中的整個鏈表存盤保存。
CRandom2Dlg使用CFileRandom類實現具體操作。同樣,與本文相關的源碼都作了詳細說明。
再次感謝您閱讀本文,歡迎您批評指正。
本文配套源碼