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