Я использую Берлин в Windows 10. Пытаюсь сохранить tList<string>
в файл.
Я знаю, как обрабатывать tStringlist, tStreamWriter и tStreamReader, но мне нужно использовать tFileStream, потому что нужно добавить другой тип данных.
В следующем коде цикл Button2Click, который читает данные, вызывает исключение eOutOfMemory. Когда я выделяю простое строковое значение для _String, это работает хорошо, но если я помещаю значение tList в тот же _String, кажется, что в файл были записаны неправильные данные. Я не понимаю разницы между _String := _List.List[i]
и _String := 'qwert'
.
Как мне написать tList<string>
в tFileSteam?
procedure TForm1.Button1Click(Sender: TObject);
var
_List: TList<string>;
_FileStream: TFileStream;
_String: string;
i: Integer;
begin
_List := TList<string>.Create;
_List.Add('abcde');
_List.Add('abcde12345');
_FileStream := TFileStream.Create('test', fmCreate);
for i := 0 to 1 do
begin
_String := _List.List[i]; // _String := 'qwert' works well
_FileStream.Write(_string, 4);
end;
_FileStream.Free;
_List.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
_FileStream: TFileStream;
_String: string;
i: Integer;
begin
_FileStream := TFileStream.Create('test', fmOpenRead);
for i := 0 to 1 do
begin
_FileStream.Read(_String, 4);
Memo1.Lines.Add(_String);
end;
_FileStream.Free;
end;
TList<string>
- вполне разумный выбор. Менее загроможден этотTStringList
свойствомObjects[]
, если вы его не используете. - person David Heffernan   schedule 27.08.2016TStreamWriter
иTStreamReader
. Они могут писать и читать довольно много типов, включая строки. Это сериализация. - person Rudy Velthuis   schedule 27.08.2016