Delphi读取非文本文件(二进制)

时间:2012-11-27 11:16:26

标签: delphi file-io

如何在Delphi中以非文本模式打开二进制文件? 像C函数fopen(filename,"rb")

2 个答案:

答案 0 :(得分:11)

有几个选择。

<强> 1。使用文件流

var
  Stream: TFileStream;
  Value: Integer;
....
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
  Stream.ReadBuffer(Value, SizeOf(Value));//read a 4 byte integer
finally
  Stream.Free;
end;

<强> 2。使用阅读器

您可以将上述方法与TBinaryReader结合使用,使值的读取更简单:

var
  Stream: TFileStream;
  Reader: TBinaryReader;
  Value: Integer;
....
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
  Reader := TBinaryReader.Create(Stream);
  try
    Value := Reader.ReadInteger;
  finally
    Reader.Free;
  end;
finally
  Stream.Free;
end;

reader类有许多函数可以读取其他数据类型。你可以用二进制编写器向相反的方向前进。

第3。旧式Pascal I / O

您可以声明File类型的变量,并使用AssignFileBlockRead等来读取文件。我真的不推荐这种方法。现代代码和库几乎总是更喜欢流习惯用法,并且通过自己做同样的事情,您将使代码更容易适应其他库。

答案 1 :(得分:2)

您有不同的选择,其中两个是:

使用旧学校方法,就像你指出的C函数一样:

var
  F: File;
begin
  AssignFile(F, 'c:\some\path\to\file');
  ReSet(F);
  try
    //work with the file
  finally
    CloseFile(F);
  end
end;

使用更现代的方法根据文件创建TFileStream:

var
  F: TFileStream;
begin
  F := TFileStream.Create('c:\some\path\to\file', fmOpenRead);
  try
    //work with the file
  finally
    F.Free;
  end;