我定义了一个结构 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]的长度限定,应该没问题了吧???
不知道我在什么地方理解错了,还是我代码那个地方写得有问题,请大家帮帮忙.
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]的长度限定,应该没问题了吧???
不知道我在什么地方理解错了,还是我代码那个地方写得有问题,请大家帮帮忙.
解决方案 »
- Delphi中怎样比较大小?
- 简单问题Method 'aa' not supported by automation object错误怎么改啊!!(50分)
- VCLZIP压缩之后在Linux下解压乱码?
- 假如我在canvas上画了一条红色的线,那么这条线所覆盖的象素的颜色会改变吗?
- 只保存一段时间数据记录,产生新的记录时第一条数据记录自动消失,该怎么样做?
- 我是DELPHI新手,有些问题想请教高手
- 急!急!急!
- 怎样让一个DBGrid显示出来的数据在另一个DBGrid中显示?
- 求救!这段query的SQL错在那里了?
- 请问ACCESS中的货币类型到底是什么类型
- Delphi代码 转C#代码 就两句话 (本人对Delphi 一点都不懂)
- 这样的控件该怎么写?给vb.net调用的。
.....
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;
然后发现读出来的数据不对,后来找到原因
var
tmpTask:PTaskInfo;
...
New(tmpTask);
ZeroMemory(tmpTask,sizeof(TTaskInfo));
fStream.Read(tmpTask^,sizeof(TTaskInfo));
//错误语句:fStream.Read(tmpTask,sizeof(TTaskInfo));
...之前etomahawk 说的加上packed关键字,与解决问题没有关系,所以不好意思,就不给分了. 谢谢大家.