読者です 読者をやめる 読者になる 読者になる

TFileStreamを使ってファイルを読み込む

System.Classes.TFileStreamを使ってファイルを読み込むのを、DelphiXE3で試しました。
かなり昔から使い方は変わってないですね。
簡単な例として16進ダンプを作ってみました。

hexdump.dpr

program hexdump;

{$APPTYPE CONSOLE}

uses
  System.SysUtils
  , System.Classes
  ;

var
  FileStream: TFileStream;
  Column, I: Integer;
  ReadLength: Longint;
  Buffer: array [0..255] of Byte;

begin
  (* コマンドライン引数が無ければ終了 *)
  if ParamCount = 0 then
  begin
    Writeln(Format('%s <filepath>', [ExtractFileName(ParamStr(0))]));
    Exit;
  end;
  (* ファイルを読み込み専用で開く *)
  FileStream := TFileStream.Create(ParamStr(1), fmOpenRead);
  try
    Column := 0;
    while True do
    begin
      ReadLength := FileStream.Read(Buffer, SizeOf(Buffer));
      if ReadLength = 0 then
        Break;
      for I := 0 to ReadLength - 1 do
      begin
        (* 改行 *)
        if Column = 16 then
        begin
          Column := 0;
          Writeln('');
        end;
        (* 16進数で画面に出力 *)
        Write(Format('%.2x ', [Buffer[I]]));
        Inc(Column);
      end;
    end;
  finally
    (* ファイルを閉じる *)
    FreeAndNil(FileStream);
  end;
end.

Makefile

win32:
	dcc32 hexdump.dpr

osx:
	dccosx hexdump.dpr

all: win32 osx

clean:
	del hexdump.exe
	del hexdump

実行結果

>make
>hexdump Makefile
77 69 6E 33 32 3A 0A 09 64 63 63 33 32 20 68 65
78 64 75 6D 70 2E 64 70 72 0A 0A 6F 73 78 3A 0A
09 64 63 63 6F 73 78 20 68 65 78 64 75 6D 70 2E
64 70 72 0A 0A 61 6C 6C 3A 20 77 69 6E 33 32 20
6F 73 78 0A 0A 63 6C 65 61 6E 3A 0A 09 64 65 6C
20 68 65 78 64 75 6D 70 2E 65 78 65 0A 09 64 65
6C 20 68 65 78 64 75 6D 70 0A