你的问题没有说清楚 ,头文件里一般记录了数据类型,长度,和数量,如果有了这些,就可以读出了呀
如var
F:TFileStream;
Fh:Tfilehead;//tfilehead是文件头结构
ds: array of tdata;//tdata是所存的数据类型
begin
  F:=TfileStream.create;
  setlength(ds,fh.count);
  f.read(ds,fh.count*sizeof(tdata));
  F.free;
end;
上面是我写的小例子,其中tfilehead,tdata是我假设的头结构,和数据结构生成文件最好用FileCreate

解决方案 »

  1.   

    var
      f   : file;
      buf : pchar;begin
      getmem(buf,100);//设文件头为100字节
      blockread(f,buf,100);
      //从buf中取出需要的数据从新计算下面要读入的数据空间大小
      freemem(buf);
      getmem(buf,newsize);
      blockread(f,buf,newsize);
      //处理
      freemem(buf);
    end;
      

  2.   

    TFileStream。
    TFileStream.ReadStream, TFileStream.WriteStream;
      

  3.   

    写文件也是同样的操作。blockwrite
      

  4.   

    我再说一下我的问题:我要将数据存盘为文件,供以后读取.
    数据的格式为, 前一部分是几个概括性数据(文件头),后一部分是"数量不定"的大量整数型数据(数据量在程序中由某变量给出).1、请问怎样生成文件,并把数据存入?
    (我希望用块写的方式,这样也许写来简单,读来也方便^_^,只是不知因为后面的数据“数量不定”,能否用块写。如果能,怎样写?)
    请高手提供一个最佳方案!2、对于文件,有用Handle的,有用类型文件的,有用FileStream的,我分不清楚,请解释。
    (如果用类型文件<var xx:file of x>,是否只能固定类型的数据?)3、另外,我用
        var FileHdl:integer;
        ……
        FileHdl:=FileOpen('d:\xxxx.txt',fmCreate);
        ……//写数据……
        FileClose(FileHdl);
    并没有生成 d:\xxxx.txt 文件,检查FileHdl,总是-1 !!!!为什么????
      

  5.   

    你的文件头肯定是一个固定的结构,所以写文件头的时候blockwrite肯定是没有问题的。至于后面的数据,要确保你的数据是连续的,那你只要知道数据头的位置及数据的长度,也可以的。
    var
      head:THeadDef;
      buf :pointer;
      f   : file;
    begin
      //打开文件
      blockwrite(f,@head,sizeof(head));
      blockwrite(f,@buf,BufSize);
      //关闭文件
    end;