在Delphi中,我如何以非文本模式打开二进制文件?就像C函数fopen(filename,“rb”)
一样。
有几个选项。
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;
读取器类有许多函数可以读取其他数据类型。而您可以通过二进制写入器朝相反的方向前进。
3. 旧式帕斯卡I / O
您可以声明一个File
类型的变量,并使用AssignFile
,BlockRead
等从文件中读取。我真的不建议采用这种方法。现代代码和库几乎都偏爱流模式,如果自己做同样的事情,您将使代码更容易适配其他库。
您有不同的选项,其中两个是:
使用老派方法,比如您指出的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;
FileOpen()
、FileRead()
和FileClose()
函数,它们是TFileStream
内部使用的。 - Remy Lebeau