Паскаль: буферизація введення-вивединня, Детальна інформація

Паскаль: буферизація введення-вивединня
Тип документу: Реферат
Сторінок: 8
Предмет: Комп`ютерні науки
Автор: Олексій
Розмір: 18.8
Скачувань: 1198
Повернемося до задачі копіювання й напишемо програму, виконання якої в сотні (!) разів швидше від програми StupidCopy. У ролі "внутрішнього буфера" виступає масив символів Buf розміром у Bufsz=32K байтів. Спочатку за викликом FileSize визначається розмір вхідного файла в байтах, а потім файл читається в масив порціями по Bufsz байтів. Обробка цього буфера в даному разі полягає в блочному копіюванні у вихідний файл. Остання порція може містити менше, ніж Bufsz байтів – масив заповнюється та переписується в файл не до кінця.

program QuickCop;

const Bufsz=32768;

var f, g : file;

Buf : array[1..Bufsz] of char;

restfil, portion : Longint;

rdin, wrou : word; s : string;

begin

writeln( 'Задайте ім'я файла-джерела:');

readln (s); assign (f , s );

writeln( 'Задайте ім'я цільового файла:');

readln (s); assign (g , s );

reset(f, 1); rewrite(g, 1);

restfil:=filesize(f);

while restfil>0 do

begin

if restfil>Bufsz then portion:=Bufsz

else portion:=restfil;

dec(restfil, portion);

Blockread (f, Buf, portion, rdin);

if rdin<>portion then

begin

writeln('Помилка читання файла'); halt

end;

Blockwrite(g, Buf, portion, wrou);

if wrou<>portion then

begin

writeln('Помилка запису файла'); halt

end;

end;

The online video editor trusted by teams to make professional video in minutes