gpt4 book ai didi

delphi - 将字符串写入 TMemoryStream

转载 作者:行者123 更新时间:2023-12-03 14:45:30 29 4
gpt4 key购买 nike

我在这里阅读了很多关于将字符串写入 TMemoryStream 并保存到文件并将字符串读回 TMemoryStream 的讨论

我不知道我在这里做错了什么,但我的 SaveData 或 LoadData 都是错误的。我可以在调用 SaveData 之前检查 Title 的值,它包含我所期望的内容。但是,当我调用 LoadData 并检查 Title 的值时,它是垃圾。谁能告诉我我做错了什么

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;

最佳答案

当您使用时

Stream.Write(Str[1], StrLen);

您正在将第一个 StrLen 字节写入流中。但 (unicode) 字符串数据实际上是 StrLen * SizeOf(Char) 字节(您必须考虑 char 类型的大小)。所以以下应该有效:

Stream.Write(Str[1], StrLen * SizeOf(Str[1]));

从流中读回数据时相同。

关于delphi - 将字符串写入 TMemoryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815146/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com