過去,我已經看到了這項工作,但我從來沒有真正理解應該如何完成。
假設我們有一個文件已知的數據類型的,但未知長度,像TSomething
動態陣列,其中有效使用Delphi從文件中讀取未知大小的塊
type
TSomething = class
Name: String;
Var1: Integer;
Var2: boolean;
end;
的問題,不過,是該對象類型可以被擴展未來,增加更多變量(例如Var3: String
)。
然後,用舊版本保存的文件將不包含最新變量。
文件讀取過程應該以某種方式識別數據塊,與像一個算法:
procedure Read(Path: String)
begin
// Read Array Size
// Read TSomething --> where does this record end? May not contain Var3!
// --> how to know that the next data block I read is not a new object?
end;
我已經看到了BlockRead
和BlockWrite
這個工作,我認爲每一個對象應該寫自己之前可能會寫它的大小在文件中,但我會感激一個例子(不一定是代碼),知道我正在朝着正確的方向思考。
相關的讀數,我發現:
SO - Delphi 2010: How to save a whole record to a file?
Delphi Basics - BlockRead
SO - Reading/writing dynamic arrays of objects to a file - Delphi
SO - How Can I Save a Dynamic Array to a FileStream in Delphi?
謝謝大衛。這是客觀的,但我認爲你解決了閱讀未知尺寸和序列化。謝謝。 – mavrosxristoforos