Чтение бинарного файла
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).
|