Чтение бинарного файла
var f: File; c: Char; begin AssignFile(f, 'this.bin'); Reset(f, 1); BlockRead(f, c, sizeof(c)); CloseFile(f); end; |
function FindInFile( cFileName : string; cCh : char ) : boolean; var fFile : file; aBuf : array[1..1024] of char; lFound : boolean; x, nRead : integer; begin Assign( fFile, cFileName ); Reset( fFile, 1 ); lFound := False; repeat BlockRead( fFile, aBuf, SizeOf( aBuf ), nRead ); x := 1; while not lFound and ( x <= nRead ) do begin lFound := ( aBuf[ x ] = cCh ) Inc( x ) end; until ( nRead < SizeOf( aBuf ) ) or lFound; FindInFile := lFound end; |
Взгляните на следующий код:
var f: file; c: Char; begin AssignFile(f, 'c:\autoexec.bat'); Reset(f, 1); <- Примечание: Размер записи = 1 байту это нормально! while not Eof(f) do begin BlockRead(f, c, SizeOf(c)); {Теперь обрабатываем c} end; CloseFile(f); end; |
Для ускорения этой процедуры не следует за один проход читать по одному символу. Возможно, лучшим решением будет объявление PChar скажем, размером 200, и чтением за один проход блоков размером 200 байт. {например, BlockRead(f, p, 200);} Но для этого требуется немного больше кода, чем показано здесь... (Используйте все тот же recordsize, равный 1, меняется только blocksize). [001701]