[英]Simple read/write record .dat file in Delphi
由於某些原因,即使昨天使用我的OpenID帳戶也不再存在。 但無論如何。
我需要將記錄數據保存到.dat文件中。 我嘗試了很多搜索,但都與數據庫和BLOB有關。 我無法從中構造任何東西。
我有以下記錄
type
Scores = record
name: string[50];
score: integer;
end;
var rank: array[1..3] of scores;
我只需要一種簡單的方法來保存和讀取.dat文件中的記錄數據。 我有一本關於如何做的書,但是那是在學校。
您還應該查看-method的file of
。
這有點過時了,但這是學習如何使用文件的好方法。
由於無法使用此方法將具有動態數組(包括普通字符串)的記錄存儲到文件中,因此不支持unicode字符串。 但是string[50]
是基於ShortStrings的,因此您的記錄已經是非unicode了...
寫入文件
var
i: Integer;
myFile: File of TScores;
begin
AssignFile(myFile,'Rank.dat');
Rewrite(myFile);
try
for i := 1 to 3 do
Write(myFile, Rank[i]);
finally
CloseFile(myFile);
end;
end;
從文件讀取
var
i: Integer;
Scores: TScores;
myFile: File of TScores;
begin
AssignFile(myFile, 'Rank.dat');
Reset(myFile);
try
i := 1;
while not EOF(myFile) do
begin
Read(myFile, Scores);
Rank[i] := Scores; //You will get an error if i is out of the array bounds. I.e. more than 3
Inc(i);
end;
finally
CloseFile(myFile);
end;
end;
使用流。 這是一個簡單的演示(只是演示-實際上,不需要每次都重新打開文件流):
type
Scores = record
name: string[50];
score: integer;
end;
var rank: array[1..3] of scores;
procedure WriteScores(var Buf; Count: Integer);
var
Stream: TStream;
begin
Stream:= TFileStream.Create('test.dat', fmCreate);
try
Stream.WriteBuffer(Buf, SizeOf(Scores) * Count);
finally
Stream.Free;
end;
end;
procedure ReadScore(var Buf; Index: Integer);
var
Stream: TStream;
begin
Stream:= TFileStream.Create('test.dat', fmOpenRead or fmShareDenyWrite);
try
Stream.Position:= Index * SizeOf(Scores);
Stream.ReadBuffer(Buf, SizeOf(Scores));
finally
Stream.Free;
end;
end;
// write rank[1..3] to test.dat
procedure TForm1.Button1Click(Sender: TObject);
begin
rank[2].name:= '123';
WriteScores(rank, Length(Rank));
end;
// read rank[2] from test.dat
procedure TForm1.Button2Click(Sender: TObject);
begin
rank[2].name:= '';
ReadScore(rank[2], 2 - Low(rank));
ShowMessage(rank[2].name);
end;
在“ blockread”和/或“ blockwrite”下查看幫助。 可能會有一個例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.