放在TList中的数据的保存问题
我定义了一个结构
PTaskInfo = ^TTaskInfo;
TTaskInfo = record
TaskID:Integer;
Description:String[255];
OfWeek:array[0..6] of Boolean;
DatesList:array[0..23] of String[25];
DatesListCount:Byte;
end;
然后,把数据(指针)不断添加到TList
var info:PTaskInfo;
...
New(info);
...
var list:TList;
...
list.Add(info);
...
//到程序结果时才调用类似Dispose(list.Items[n])的语句
接着,用TFileStream将TList写入文件
fStream.Write(list.Items[i]^,sizeof(TTaskInfo));
但是最后用十六进制编辑器查看文件是,发现保存的数据不对,出现一些莫名奇妙的数据(如窗体的属性).
本来不想在record中使用String,但这样用起来方便得多.而且我已经加上String[50]的长度限定,应该没问题了吧???
不知道我在什么地方理解错了,还是我代码那个地方写得有问题,请大家帮帮忙.
[解决办法]
procedure Test;
var
I: Integer;
FList: TList;
FPtr: PTaskInfo;
begin
FList := TList.Create;
try
for I := 0 to 9 do
begin
New(FPtr);
ZeroMemory(FPtr, SizeOf(TTaskInfo));
FList.Add(FPtr);
FPtr^.Description := 'This is Budded.'
end;
with TFileStream.Create('c:\budded.bin', fmCreate) do
try
for FPtr in FList do
Write(FPtr^, SizeOf(TTaskInfo));
finally
Free;
end;
finally
FList.Free;
end;
end;