简单的读/写记录.dat文件在Delphi



由于某种原因,我的OpenID帐户不再存在,即使我昨天使用它。但是不管怎样。

我需要将记录数据保存到。dat文件中。我尝试了很多搜索,但都与数据库和BLOB有关。我不能从它构造任何东西。

我有以下记录

   type
   Scores = record
     name: string[50];
     score: integer;
   end;  
var rank: array[1..3] of scores;

我只需要一个简单的方法来保存和读取记录数据从一个。dat文件。我有关于如何做的书,但那是在学校。

您还应该看看file of -方法。

这有点过时了,但这是学习如何处理文件的好方法。

由于使用此方法不能将带有动态数组(包括普通字符串)的记录存储到文件中,因此不支持unicode字符串。但是string[50]是基于短字符串的,因此您的记录已经是非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"one_answers"blockwrite"下面的帮助。可能会有一个例子

相关内容

  • 没有找到相关文章

最新更新