Тип безтипових файлів
Розглянемо програму посимвольного копіювання файлів:
program StupidCopy;
var f, g : file of char; c : char; s : string;
begin
writeln('Задайте ім'я початкового файла');
readln(s); assign(f, s);
writeln('Задайте ім'я цільового файла');
readln(s); assign(g, s);
reset(f); rewrite(g);
while not eof(f) do
begin
read(f, c); write(g, c);
end;
close(f); close(g);
end.
Здається, що при виконанні цієї простенької програмки все гаразд, оскільки за рахунок використання буферів фізичні файли читаються-записуються порціями по кілька блоків, пристрої при цьому працюють найкращим чином, а переміщення інформації відбуваються головним чином усередині оперативної пам’ яті, тобто швидко.
Спробуйте запустити її на виконання, указавши вхідним файл розміром у кілька сотень кілобайтів – виконання займе секунди й десятки секунд. Напрошується висновок, що при її виконанні дещо здійснюється не найкращим чином. Розглянемо один із способів прискорення роботи з файлами.
Система Турбо Паскаль дозволяє створити додатковий власний буфер і власноруч описати його застосування. Це виявляється набагато ефективнішим від використання буферів, що забезпечуються системою. А реалізується це за допомогою безтипових файлів.
Тип безтипових файлів задається словом file. Файлову змінну цього типу, як і всіх інших файлових типів, треба спочатку зв’ язати з фізичним файлом і відкрити, установивши в початковий стан для читання чи запису. Процедури відкривання RESET і REWRITE тут мають по 2 параметри. Крім імені файлової змінної, у їх виклику вказується розмір "зовнішнього буфера" в байтах. Цей буфер ще називається блоком і явно в Паскаль-програмі не позначається. Через нього дані копіюються з фізичного файла до "внутрішнього буфера". Розмір блока може бути в межах від 1 до 65535. Як не дивно, найкраще встановити його рівним 1:
ReSet(f, 1) або ReWrite(g, 1).
Чому саме так, ми скажемо далі.