Zapisuję do pliku dane, w których występuje zmienna typu AnsiString.
TData = record
ID: integer;
Nazwa: string[30];
//I jeszcze kilka zmiennych.
end;
Komentarz: array of AnsiString; //Może zawierać powyżej 255 znaków
Procedura zapisu wygląda w ten sposób:
var
plik: TFileStream;
rec: TData;
n: integer;
begin
plik := TFileStream.Create('plik', fmCreate);
plik.WriteBuffer(liczbaRekordow, SizeOf(liczbaRekordow)); //liczbaRekordow: integer
for i := 0 to liczbaRekordow do
begin
plik.WriteBuffer(rec, SizeOf(rec));
n := Length(Komentarz[i]);
plik.WriteBuffer(n, SizeOf(n));
plik.WriteBuffer(PChar(Komentarz[i])^, n);
end;
plik.Free;
end;
Jak próbuję to później odczytać
plik.ReadBuffer(n, SizeOf(n)) //Długość stringu
plik.ReadBuffer(Komentarz[i], n);
to wywala Access Violation. Problem występuje tylko z tą zmienną, bo jak ją usunę to wszystko jest ok.
Co powoduje ten problem?