我有下面这样一个结构,怎么 写文件,再读出来??
type
TTechParamValueItem = record
Title: string;
Value: Integer;
end;
TTechParamShowLabel = record
Title: string;
ShowAttr: string;
end;
TTechParamData = record
TechName: string;
FullName: string;
DataLength : integer;
Data: array of TTechParamValueItem;
LabelsLength : integer;
Labels: array of TTechParamShowLabel;
CoorAttr: string;
end;
TTechParamSet = array of TTechParamData;
type
TTechParamValueItem = record
Title: string;
Value: Integer;
end;
TTechParamShowLabel = record
Title: string;
ShowAttr: string;
end;
TTechParamData = record
TechName: string;
FullName: string;
DataLength : integer;
Data: array of TTechParamValueItem;
LabelsLength : integer;
Labels: array of TTechParamShowLabel;
CoorAttr: string;
end;
TTechParamSet = array of TTechParamData;
解决方案 »
- 在指定窗体中打开运行exe程序?
- 请大家帮忙,trim时遇到的问题,不胜感激~~~~~~~~~~~
- wsprintf函数使用时,delphi中有问题,帮帮我
- 如何以TListView中的内容作报表
- 何为物流??
- 在线急等
- Delphi如何做到监视一个WEB窗口的运行,并能截取WEB窗口发往网站的消息?在线等候...
- delphi和flash之间参数传递用动态文本变量正常其它都错?
- 在orical数据库中如何用delphi存储jpg图象!!jpg图象是文件的形式!!!急!!!!!!
- 请教newyj(老鬼)
- 我的程序运行时发生一个“Range Check Error”错误,我想让错误发生时,程序自动点击错误框的“确定”按钮销掉,请问怎么办?
- 麻烦各位发挥一下!
AssignFile(DataFile,FileName);
ReWrite(DataFile,1);
BlockWrite(DataFile,Lhead,16,count); for i:=Low(Listante) to High(Listante) do
begin
BlockWrite(DataFile,Listante[i],64,count);
end;
CloseFile(DataFile);
关键是怎么再从文件中读出来?
Data: array of TTechParamValueItem;
Labels: array of TTechParamShowLabel;
都是动态数组
你循环读,知道读的字节为0就OK了;
应该明白怎么做了?
再定义一个RECORD;
type recordsize=record
array1size:integer;
array2size:integer;
recordsize:integer;
end;
写文件的时候先也这个头记录,然后写数据,循环写;应该可以的;
动态数组、variant、string都是指针,占4byte
你这个问题并不难解决,就是麻烦点而已
保存数据时,先保存其信息如长度,类型等,然后保存数据
恢复的时候,对于动态数组,先SetLength(长度),然后赋值
对于你的record,也必须使用赋值的方法来完成,你可以先blockread到record,
因为record大小是一定的,不会变化!!!,然后你再将record里面的动态数组、
variant、string等分配内存,简单的说就是赋值,这样就建立指针到具体数据的联系了,有什么问题呢?