Я использую Berlin в Windows 10. Я пытаюсь сохранить файл tList<string>
в файл.Запись tList <string> в tFileStream
Я знаю, как обрабатывать 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;
Вы пробовали сериализовать его? –
@ IgnacioVazquez-Abrams Нет, я этого не делал. Мне жаль, что я никогда не слышал об этом. –
Почему вы не используете [TStringList] (http://docwiki.embarcadero.com/Libraries/en/System.Classes.TStringList), у него есть методы SaveToFile и LoadFromFile? – whosrdaddy