필자는 Windows 10에서 Berlin을 사용합니다. tList<string>
을 파일에 저장하려고합니다.tList를 쓰는 중 tListStream
나는 tStringlist, tStreamWriter 및 tStreamReader를 처리하는 방법을 알고 있지만 다른 유형의 데이터를 추가해야하기 때문에 tFileStream을 사용해야합니다.
다음 코드에서 데이터를 읽는 Button2Click 루프는 eOutOfMemory 예외를 발생시킵니다. 간단한 문자열 값을 _String 할당 할 때 잘 작동하지만 동일한 _String tList 값을 넣을 경우 파일에 잘못된 데이터가 기록 된 것 같습니다. _String := _List.List[i]
과 _String := 'qwert'
의 차이를 이해할 수 없습니다.
어떻게 tFileSteam에 tList<string>
을 쓸 수 있습니까?
TFileStream.Write
워드 프로세서에서 조회하면 (
THandleStream.Write
에서 상속)
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