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;
whilenot lFound and (x <= nRead) dobegin
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 байту это нормально!
whilenot Eof(f) dobegin
BlockRead(f, c, SizeOf(c));
{Теперь обрабатываем c}end;
CloseFile(f);
end;
Для ускорения этой процедуры не следует за один проход читать по одному символу.
Возможно, лучшим решением будет объявление PChar скажем, размером 200, и чтением
за один проход блоков размером 200 байт. {например, BlockRead(f, p, 200);} Но
для этого требуется немного больше кода, чем показано здесь... (Используйте все
тот же recordsize, равный 1, меняется только blocksize).
Практический подход к чтению бинарного файла заключается в том, что вместо прочтения по одному символу, можно объявить переменную типа PChar и считать блоки размером 200 байт.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS