Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС 2017
выпущен 15 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО 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).




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS