Простая запись чтения/записи.файл dat в Delphi
по какой-то причине моя учетная запись OpenID больше не существует, даже когда я использовал ее вчера. Но все равно.
Мне нужно сохранить данные записи в a .файл dat. Я пробовал много искать, но все это было связано с базами данных и BLOB-объектами. Я ничего не смог из него построить.
У меня есть следующие записи
type
Scores = record
name: string[50];
score: integer;
end;
var rank: array[1..3] of scores;
Мне просто нужен простой способ сохранения и чтения данных из .файл dat. У меня была книга о том, как это сделать, но это в школа.
3 ответов
вы также должны взглянуть на file of
-метод.
Это немного устаревшей, но это хороший способ научиться работать с файлами.
поскольку записи с динамическими массивами (включая обычные строки) не могут быть сохранены в файлах с помощью этого метода, строки unicode не будут поддерживаться. Но!--3--> базируется на ShortStrings и ваша запись поэтому уже в юникоде...
пишите файл
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;