Cześć wszystkim. Mam napisać program, który ma najpierw zapisać dane na dysk a później je odczytać. Wygląda to tak:
type
TData = record
Stringi: String[64];
Krotkie: String[64];
I: String;
Dlugie: String;
end;
TAData = array of TData;
TConfig = record
Left: Integer;
Top: Integer;
Width: Integer;
Height: Integer;
Count: Word;
end;
var
Data: TAData;
Zapisywanie danych wydaje się odbywać poprawnie:
function TFormMain.SaveSettings: Boolean;
var
I: Word;
Config: TConfig;
Count: Word;
F: File;
begin
AssignFile(F, 'plik');
FileMode := fmOpenWrite;
Rewrite(F, 1);
with Config do begin
Left := Self.Left;
Top := Self.Top;
Width := Self.Width;
Height := Self.Height;
Count := Length(Data);
end;
BlockWrite(F, Config, SizeOf(TConfig));
if Config.Count > 0 then for I := 0 to Config.Count - 1 do begin
BlockWrite(F, Data[I], SizeOf(TData));
end;
CloseFile(F);
end;
Problem pojawia się przy próbie odczytania zapisanych danych:
function TFormMain.LoadSettings: Boolean;
var
I: Word;
Config: TConfig;
Count: Word;
F: File;
begin
AssignFile(F, 'plik');
FileMode := fmOpenRead;
Reset(F, 1);
BlockRead(F, Config, SizeOf(TConfig));
Left := Config.Left;
Top := Config.Top;
Width := Config.Width;
Height := Config.Height;
Count := Config.Count; // ilość elementów tablicy Data
SetLength(Data, Count);
if Count > 0 then for I := 0 to Count - 1 do begin
BlockRead(F, Data[I], SizeOf(TData));
// Tutaj program się wysypuje na pierwszym rekordzie z komunikatem I/O error 103
end;
CloseFile(F);
end;
Wcześniej próbowałem to samo zrobić za pomocą TFileStream, ale efekt był podobny (AV). Co robię nie tak? Gdzie jest błąd? Z góry dziękuję za wszelką pomoc.