Процедура BlockRead используется для чтения RecordCount записей данных в Buffer из нетипизированного двоичного файла, данного FileHandle.
Файл, должно быть, был назначен, используя AssignFile и открыт с помощью Reset.
Подпрограмма Reset по умолчанию открывает файл с размером записи равной 128 байт. Этот размер может быть изменён в этой подпрограмме в значение, более полезное для вас (см. пример).
Данные записываются в Buffer (обычно строка или byte массив) из файла. Если recordSize 10 байт, и RecordCount 3, то 3 записи по 10 байт будут занимать 30 байт, взятыми из файла.
Фактический число считанных записей сохраняется в дополнительной переменной RecordsRead. Она будет меньше чем RecordCount, если, например, был достигнут конец файла.
|
var
myFile : File;
byteArray : array[1..8] of byte;
oneByte : byte;
i, count : Integer;
begin
// Попытка открыть файл Test.byt для записи
AssignFile(myFile, 'Test.byt');
ReWrite(myFile, 4); // Определение отдельной 'записи' как 4 байта
// Заполнение массив данными
for i := 1 to 8 do
byteArray[i] := i;
// Запись данных массива в файл
BlockWrite(myFile, byteArray, 2); // Запись 2 'записи' из 4 байт
//Закрытие файла
CloseFile(myFile);
// Повторное открытие файла для чтения
FileMode := fmOpenRead;
Reset(myFile, 1); // Теперь мы определяем одну запись как 1 байт
// Показ содержимого файла
// Чтение первых 6 байт. 'count' установлен в
// текущий считанный номер
ShowMessage('Чтение первого набора байтов :');
BlockRead(myFile, byteArray, 6, count);
// Показ счтанных значений байта
for i := 1 to count do
ShowMessage(IntToStr(byteArray[i]));
// Теперь читаем один байт за один раз и так до конца файла
ShowMessage('Чтение остающихся байтов :');
while not Eof(myFile) do
begin
BlockRead(myFile, oneByte, 1); // Чтение одного байта за один раз
ShowMessage(IntToStr(oneByte));
end;
// Закрытие файла в последний раз
CloseFile(myFile);
end;
|