Zapisywanie łańcuchów znaków do plików amorficznych wiąże się po piersze z uprzednim zapisem długości łańcucha, a po drugie - BlockWrite oczekuje podania konkretnego znaku, od którego zapisany zostanie bufor (a dokładniej niejawnie adresu znaku) oraz wielkości bufora; A że SizeOf zmiennej łańcuchowej zawsze zwróci rozmiar wskaźnika - użyć trzeba funkcji Length;
Natomiast przy odczycie najpierw odczytujesz długość łańcucha w pliku, następnie ustawiasz długość zmiennej łańcuchowej i wczytujesz bufor za pomocą BlockRead;
Jeżeli łańcuchy zapisywane do plików zawsze mają taki sam rozmiar, to zapis długości łańcuchów pomiń, ale pamiętaj o tym, w jaki sposób podaje się łańcuchy do zapisu/odczytu przez wymienione procedury;
Dawno już nie używałem plików amorficznych, ale z tego co pamętam to tak powinny wyglądać zapis i odczyt danych; Ewentualnie zastanów się nad klasą strumienia TFileStream
i z niej korzystaj do operacji na plikach amorficznych;
____Edit: Sprawdziłem poniższy kod i działa prawidłowo:
{$APPTYPE CONSOLE}
procedure SaveStringToFile(const AFileName, AData: AnsiString);
var
fOutput: File;
intDataSize: Integer;
begin
AssignFile(fOutput, AFileName);
ReWrite(fOutput, 1);
try
intDataSize := Length(AData);
BlockWrite(fOutput, intDataSize, SizeOf(Integer));
BlockWrite(fOutput, AData[1], intDataSize);
finally
CloseFile(fOutput);
end;
end;
procedure LoadStringFromFile(const AFileName: AnsiString; out AData: AnsiString);
var
fInput: File;
intDataSize: Integer;
begin
AssignFile(fInput, AFileName);
Reset(fInput, 1);
try
BlockRead(fInput, intDataSize, SizeOf(Integer));
SetLength(AData, intDataSize);
BlockRead(fInput, AData[1], intDataSize);
finally
CloseFile(fInput);
end;
end;
const
DATA_FILENAME = 'C:\File.dat';
var
strData: AnsiString;
begin
Write('Type string to save: ');
ReadLn(strData);
SaveStringToFile(DATA_FILENAME, strData);
strData := '';
LoadStringFromFile(DATA_FILENAME, strData);
Write('Loaded string: "', strData, '"');
ReadLn;
end.
Działa prawidłowo także dla pustych łańcuchów - nie trzeba dodawać specjalnych zabezpieczeń.