Советы по Delphi


Чтение бинарного файла


    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]



Содержание раздела