Согласие на обработку персональных данных.

16.10.2018
Новая статья Типизированные и нетипизированные указатели.

09.10.2018
Новые видео и статья Как изменить цвет текста в HTML.

02.10.2018
Новый выпуск журнала Автоматизация и программирование.

28.09.2018
Новые видео и статья Процедура Close.

26.09.2018
Новые видео и статья Как уменьшить размер программы в Lazarus.



Раздел: Стандартные функции Паскаля

Процедура BlockWrite

Процедура BlockWrite записывает данные из памяти в нетипизированный файл. Синтаксис:

 
procedure BlockWrite(var F: file; const Buf;
                     Count: Int64; var Result: Int64);

procedure BlockWrite(var F: file; const Buf;
                     Count: LongInt; var Result: LongInt);

procedure BlockWrite(var F: file; const Buf;
                     Count: Cardinal; var Result: Cardinal);

procedure BlockWrite(var F: file; const Buf;
                     Count: Word; var Result: Word);

procedure BlockWrite(var F: file; const Buf;
                     Count: Word; var Result: Integer);

procedure BlockWrite(var F: file; const Buf;
                     Count: LongInt);

Процедура BlockWrite записывает блоки данных из памяти в файл F. Количество блоков (записей) указано в параметре Count. Сами данные должны передаваться через параметр Buf.

Блок данных (запись) - это блок байтов, размер которого указан при вызове процедур Rewrite или Reset.

Result - это необязательный параметр. Этот параметр не описан в документации. Судя по всему, он предусмотрен для совместимости с процедурой BlockRead, где в него возвращается количество фактически прочитанных записей.

Однако при использовании в процедуре BlockWrite в этот параметр всегда возвращается значение, равное указанному в параметре Count, даже если на самом деле было записано меньше блоков (например, если в Buf передано меньше записей, чем указано в параметре Count).

Если данные не удается записать на диск, то происходит ошибка времени выполнения. Это поведение может управляться переключателем {$I}.

В зависимости от состояния переключателя {$I} при наличии ошибки может возникнуть ошибка времени выполнения. В состоянии {$I-} используйте функцию IOResult для проверки ошибок. Подробнее о директивах компилятора см. здесь.

Пример использования процедуры BlockWrite:

 
program blockwriteproc;

const COUNT_REC = 32;
      LEN_REC = 2;

type TWords = array[1..COUNT_REC] of WORD;

var fw1       : file;           //Файл для записи по блокам
    fw2       : file of WORD;   //Файл для записи
    NumRec    : WORD;
    Buf       : TWords;
    i         : WORD;

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
begin
  Assign(fw1, 'write-1.txt');
  Assign(fw2, 'write-2.txt');
  Rewrite(fw1,          //Файл для записи по блокам
          LEN_REC);     //Размер блока в байтах
  Rewrite(fw2);

  for i := 1 to COUNT_REC do
    begin
      Buf[i] := i * 100;
      Write(fw2, Buf[i]);
    end;

  BlockWrite(fw1,       //Файл
             Buf,       //Массив блоков для записи в файл
             COUNT_REC, //Сколько блоков надо записать в файл
             NumRec);   //См. пояснения выше

  WriteLn('The number of blocks written = ', NumRec);
  Close(fw1);
  Close(fw2);
  ReadLn;
end.

Здесь мы используем два способа записи в файл массива из 32 слов.

Первый способ более привычный - последовательная запись слов в типизированный файл.

Во втором способе мы используем процедуру BlockWrite, чтобы сохранить в файл весь массив слов. Основное отличие заключается в том, что во втором способе мы можем использовать нетипизированный файл. В некоторых случаях это более удобно.

Сравните на рисунке ниже содержимое двух файлов, созданных нашей программой, и убедитесь, что они совершенно одинаковые.

Процедура BlockWrite


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика