我有下面这样一个结构,怎么 写文件,再读出来??
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;

解决方案 »

  1.   

    type F=TTechParamSet;定义就通不过
      

  2.   

    type F=File of TTechParamSet;定义就通不过
      

  3.   

    用BLOCKREAD来处理啊;
    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);
      

  4.   

    写文件好解决
    关键是怎么再从文件中读出来?
    Data: array of TTechParamValueItem;
    Labels: array of TTechParamShowLabel;
    都是动态数组
      

  5.   

    blockread啊;
    你循环读,知道读的字节为0就OK了;
      

  6.   

    动态数组指针前面两个integer分别保存引用计数ref和长度length(byte)
    应该明白怎么做了?
      

  7.   

    但是我得给大记录分配长度吧,长度我怎么确定呢?两个INTEGER中的值再读以前是不确定的,所以大纪录中的两个小记录的长度就无法确定了
      

  8.   

    可以这样写你的文件;
    再定义一个RECORD;
    type recordsize=record
      array1size:integer;
      array2size:integer;
      recordsize:integer;
    end;
    写文件的时候先也这个头记录,然后写数据,循环写;应该可以的;
      

  9.   

    大记录怎么会不确定呢?
    动态数组、variant、string都是指针,占4byte
    你这个问题并不难解决,就是麻烦点而已
    保存数据时,先保存其信息如长度,类型等,然后保存数据
    恢复的时候,对于动态数组,先SetLength(长度),然后赋值
    对于你的record,也必须使用赋值的方法来完成,你可以先blockread到record,
    因为record大小是一定的,不会变化!!!,然后你再将record里面的动态数组、
    variant、string等分配内存,简单的说就是赋值,这样就建立指针到具体数据的联系了,有什么问题呢?