gpt4 book ai didi

delphi - 保存和加载 VirtualStringTree 后数据损坏

转载 作者:行者123 更新时间:2023-12-02 06:19:12 27 4
gpt4 key购买 nike

我正在严格按照本教程来保存和加载我的 VirtualStringTree:http://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus我现在的问题是,当我保存并加载时,我的数据已损坏。字符被更改和添加。那么有人知道问题出在哪里吗?

最佳答案

我找到了这个Link并更改了遮阳篷以适合我的代码。

Data.Symbol[1]  //Simply points to a char. So I changed it to 'char'

阅读:

Stream.Read(Len, SizeOf(Len));
SetLength(Data.Column0, Len);
Stream.Read(PChar(Data.Column0)^, Len * SizeOf(Char));

//Copy/Paste this code for all Columns

写:

Len := Length(Data.Column0);
Stream.Write(Len, SizeOf(Len));
Stream.Write(PChar(Data.Column0)^, Length(Data.Column0) * SizeOf(Char));

//Copy/Paste this code for all Columns

TLama的第二个回答:

阅读:

var
TreeData: PTreeData;
BinaryReader: TBinaryReader;
begin
TreeData := Sender.GetNodeData(Node);

BinaryReader := TBinaryReader.Create(Stream);
try
TreeData.Column0 := BinaryReader.ReadString;
TreeData.Column1 := BinaryReader.ReadString;
TreeData.Column2 := BinaryReader.ReadString;
finally
BinaryReader.Free;
end;
end;

写:

var
TreeData: PTreeData;
BinaryWriter: TBinaryWriter;
begin
TreeData := Sender.GetNodeData(Node);

BinaryWriter := TBinaryWriter.Create(Stream);
try
BinaryWriter.Write(TreeData.Column0);
BinaryWriter.Write(TreeData.Column1);
BinaryWriter.Write(TreeData.Column2);
finally
BinaryWriter.Free;
end;
end;

我实现了 TLama 的答案,因为我真的无法被所有的指针所困扰。这段代码看起来更好,更容易阅读,占用的空间更少,并且执行相同的操作。

所以得出结论。当你在网上搜索保存 VST 数据时,你会得到很多垃圾代码。第一个答案将为您修复该代码。第二个会让你微笑:)

关于delphi - 保存和加载 VirtualStringTree 后数据损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23605991/

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