скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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




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).






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook