3

Delphi でバイナリ ファイルを非テキスト モードで開く方法を教えてください。C関数のようにfopen(filename,"rb")

4

2 に答える 2

15

いくつかのオプションがあります。

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.リーダーを使用する

上記のアプローチを a と組み合わせて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. 古いスタイルの Pascal I/O

タイプの変数を宣言し、 、 などをFile使用してファイルから読み取ることができます。このアプローチは本当にお勧めしません。最新のコードとライブラリは、ほぼ常にストリームのイディオムを好みます。同じことを自分で行うことで、コードを他のライブラリに合わせやすくなります。AssignFileBlockRead

于 2012-11-27T11:31:25.000 に答える
3

さまざまなオプションがあります。そのうちの 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;
于 2012-11-27T11:37:55.023 に答える