比如我定义了这样的记录,name,memo字段字符不定长.  
type
  RuleType=record
    Name:string;
    Normal:byte;
    Flag:byte;
    Memo:string;
  end;
  myIndex=record
    Flag:string;
    Version:integer;
    Name:string;
    Maker:string;
    EMail:string;
    Rules:integer;
    Rule:array of RuleType;
  end;
var
  Mydata:myIndex请问我怎样对其进行二进制读写操作呢?

解决方案 »

  1.   

    c也好pascal也好,你要读2进制文件必须知道其写入的格式,delphi中;
    类型文件
    type
    Trec = packed record
    ...
    end;
    var
    arec ;TRec;
    recfile : file of trec;然后和文本就差不多了无类型文件:
    var
    afile :file;
    用blockread或blockwrite读写
    好好看看帮助
      

  2.   

    写进去
    var fileStream TFileStream;
    i:integer;
    fileName:string;begin
    try
    i:=1659872911;//此处小心溢出
    fileName:='文件名';
    fileStream:=TFileStream.create(fileName,fmCreate);
    fileStream.write(i,sizeof(i));
    finally
    fileStream.free;
    end;
    end;读出来var fileStream TFileStream;
    i:integer;
    fileName:string;begin
    try
    fileName:='文件名';
    fileStream:=TFileStream.create(fileName,fmopenread);
    fileStream.read(i,sizeof(i));//读到i里面去了
    finally
    fileStream.free;
    end;
    end;--------------------------------------------------------
    如果是字符串,添加一点代码就行了
    写进去
    var fileStream TFileStream;
    i:integer;
    fileName,Strdata:string;begin
    try
    strData='1659872911';
    i:=strtoint(strData);//此处小心溢出
    fileName:='文件名';
    fileStream:=TFileStream.create(fileName,fmCreate);
    fileStream.write(i,sizeof(i));
    finally
    fileStream.free;
    end;
    end;读出来var fileStream TFileStream;
    i:integer;
    fileName,strData:string;begin
    try
    fileName:='文件名';
    fileStream:=TFileStream.create(fileName,fmopenread);
    fileStream.read(i,sizeof(i));//读到i里面去了
    strdata:=inttostr(i);
    finally
    fileStream.free;
    end;
    end;
      

  3.   

    不定长?那就让他定长呀!
    不咬用string 
    用array [0..255] of Char
    或string[255]
      

  4.   

    在我的Delphi7里 SizeOf(string) = 4
    那么看来他就是一个指针了!呵呵,更正:
    不咬用string TO 不要用string
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      F: file of myIndex;
    begin
      AssignFile(F, 'c:\test.txt');
      Reset(F,1);
      a.Version:=100;
      a.Name:='分析系统';
      a.Flag:='分析系统数据文件';
      a.Maker:='moststar';
      a.EMail:='[email protected]';
      showmessage(inttostr(SizeOf(a)));
      BlockWrite(f,a,SizeOf(a));
      CloseFile(F);
    end;
    end.用Kshape说得方法我定义成这样  F: file of myIndex;
    就出现了这个错误提示:Type myIndex needs finalization - not allowed in file type 
    类型myIndex需要初始化-不允许在文件类型中如果用Blockwrite,就更有意思了.写完后用utlraedit查看内容,里面没有一个字符和我的记录相符合的.用BlockRead读完以后,显示的全是空的字符.郁闷中..........
      

  6.   

    楼主好多概念都没有理解,还是去看一些基础点的书吧。
    现在好多人连Pascal都没学好就用Delphi。