을 TMemoryStream이하는 나는 여기에 TMemoryStream이에 쓰는 문자열에 관한하고 파일에 저장하고 내가 잘못 여기에 무엇을했는지 잘 모릅니다 쓰기 문자열
TMemoryStream이
에 다시 문자열을 읽고 토론을 많이 읽을 수 있지만 한 중 내를 SaveData 또는 내 LoadData가 잘못되었습니다. SaveData를 호출하기 전에 Title의 값을 확인할 수 있으며 예상 한 값을 유지합니다. 그러나 LoadData를 호출하고 Title 값을 확인하면 쓰레기가됩니다. 당신이 스트림에 처음StrLen
바이트를 쓰고있어
Stream.Write(Str[1], StrLen);
을 사용하면 사람이 내가 잘못
procedure SaveData(FileName: TFileName);
var
MemStr: TMemoryStream;
Title: String;
begin
MemStr:= TMemoryStream.Create;
try
MemStr.Seek(0, soFromBeginning);
WriteStreamStr(MemStr, TItle);
MemStr.SaveToFile(FileName);
finally
MemStr.Free;
end;
end;
procedure LoadData(FileName: TFileName);
var
MemStr: TMemoryStream;
Title: String;
begin
MemStr:= TMemoryStream.Create;
try
MemStr.LoadFromFile(FileName);
MemStr.Seek(0, soFromBeginning);
Title := ReadStreamStr(MemStr);
finally
MemStr.Free;
end;
end;
procedure WriteStreamInt(Stream : TStream; Num : integer);
{writes an integer to the stream}
begin
Stream.WriteBuffer(Num, SizeOf(Integer));
end;
procedure WriteStreamStr(Stream : TStream; Str : string);
{writes a string to the stream}
var
StrLen : integer;
begin
{get length of string}
StrLen := Length(Str);
{write length of string}
WriteStreamInt(Stream, StrLen);
if StrLen > 0 then
{write characters}
Stream.Write(Str[1], StrLen);
end;
function ReadStreamInt(Stream : TStream) : integer;
{returns an integer from stream}
begin
Stream.ReadBuffer(Result, SizeOf(Integer));
end;
function ReadStreamStr(Stream : TStream) : string;
{returns a string from the stream}
var
LenStr : integer;
begin
Result := '';
{get length of string}
LenStr := ReadStreamInt(Stream);
{set string to get memory}
SetLength(Result, LenStr);
{read characters}
Stream.Read(Result[1], LenStr);
end;
왜'TStringStream'을 시도해 보지 않으시겠습니까? – TLama
TStringList.SaveToFile/LoadFromFile을 시도해 보시겠습니까? – iamjoosy
예,'TStrings'에는'SaveToStream'과'LoadFromStream'이 있습니다. 모든 코드는 무의미 해 보입니다. 그리고 실제 응용 프로그램에 적합하지 않은 경우 리더/작가 클래스가 작업을 수행합니다. –