建议使用文件流
procedure TForm1.N46Click(Sender: TObject);
//读取文件
var
  f:file;
  FHdr:TFileStream;
  i:integer;
begin
  if OpenDialog1.Execute then
  begin
    F:=TFileStream.create(OpenDialog1.FileName,fmopenread);
    F.read(FHdr,Sizeof(Tfileheader));  //读record.
    F.free;
    ShowMessage('已成功打开文件!');
  end; // end OpenDialog1.Execute then...
end;
应该就没问题了。

解决方案 »

  1.   

    你看看帮助,blobkread中第二个参数是变参,那个fhdr是什么
      

  2.   

    给你段例子看看:
    procedure FileCopy(const FromFile, ToFile: string);
     var
      FromF, ToF: file;
      NumRead, NumWritten: Word;
      Buf: array[1..2048] of Char;
    begin
      AssignFile(FromF, FromFile);
      Reset(FromF, 1);  { Record size = 1 }  AssignFile(ToF, ToFile); { Open output file }
      Rewrite(ToF, 1);  { Record size = 1 }
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      CloseFile(FromF);
      CloseFile(ToF);
    end;
      

  3.   

    blockread中的第三个参数是返回实际读到的字节数,尽管这个参数是可选的,但如果不用,在实际能读取的字节数少于要读数时将产生一个IO异常
      

  4.   

    当你BlockWrite之后,文件指针移动到了文件的末尾,这时候如果你紧接着作BlockRead,肯定会出现错误,因为已经到了文件末尾啊,根本就没有数据可以读了。
      

  5.   

    当你做了BlockWrite之后,文件指针已经移动到了文件末尾,这时候如果你做BlockRead,肯定是读不出来数据的,因为已经到了末尾阿
      

  6.   

    各位老大:reset()的第二个参数是什么意思?