Нетипізовані файли відрізняються тим, що для їх компонентів не вказано
тип. Відсутність типу робить ці файли, з одного боку, сумісними з любими
іншими файлами, а з іншого – дозволяє організувати швидкий обмін даними
між пам’яттю та диском.
При ініціалізації нетипізованих файлів процедурами reset чи rewrite можна
вказати довжину запису в байтах.
Наприклад:
var
f:file;
…
begin
…
reset(f,512);
…
end.
В наведеному прикладі файл, пов’язаний із нетипізованою файловою
змінною f, буде використовуватися в програмі, як нетипізований файл з
довжиною запису 512 байт.
Якщо при ініціалізації файлу довжину опущено, то
по замовчуванню вважається, що довжина рівна 128 байтам.
В Паскалі довжина
запису повинна бути додатньою і не перевищувати 65535 байт.
Для
прискорення роботи з файлом рекомендується вибирати довжину запису
кратною величині сектора дискового носія інформації (величина одного
сектора – 512 байт). Максимальної швидкості при роботі з нетипізованим
файлом можна досягти при довжині запису рівній довжині одного кластера.
Величина кластера може бути різною у різних обчислювальних системах (два
сектори і більше).
При роботі з нетипізованими файлами можуть бути використані всі
процедури і функції, що використовуються при роботі з типізованими файлами, крім read та write.
Замість них при роботі з нетипізованими файлами
використовуються процедури blockread та blockwrite:
blockread(<файлова змінна>,<буфер>,<кількість записів> [,<результат>]) –
процедура призначена для зчитуання інформації з нетипізованого файлу.
blockwrite(<файлова змінна>,<буфер>,<кількість записів> [,<результат>]) –
процедура призначена для запису інформації до нетипізованого файлу.
Параметр <файлова змінна> вказує, над яким файлом буде виконано
операцію вводу-виводу.
Параметр <буфер> вказує ім’я змінної, у яку буде
записуватись прочитана інформація при зчитуванні або із якої змінної буде
записано інформацію у файл при запису інформації.
Параметр <кількість
записів> вказує, яку кількість записів треба прочитати чи записати.
Змінна, у
яку буде записуватись зчитана інформація, повинна мати розмір достатній для
збереження заданої кількості записів.
Необов’язковий параметр <результат>
після виконання заданої процедури містить кількість записів, які реально
вдалося прочитати з файлу або записати у файл. Він використовується для
аналізу помилок при роботі з файлом і організації поведінки програми при
виникненні таких помилок.
Приклад :
uses Crt;
var
FromF, ToF: file;
NumRead, NumWritten: Word;
Buf: array[1..2048] of Char;
begin
clrscr;
Assign(FromF, 'c:\myin.txt'); { відкриваємо вхідний файл }
Reset(FromF, 1); {розмір запису 1 байт}
Assign(ToF, 'c:\myout.txt'); { відкриваємо вихідний файл }
Rewrite(ToF, 1); { розмір запису 1 байт }
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead); {читаємо з вхідного
файлу}
BlockWrite(ToF, Buf, NumRead, NumWritten); {записуємо увихідний
файл }
until (NumRead = 0) or (NumWritten <> NumRead); {повторюємо ці дії
доки не перепишемо весь вхідний файл}
Close(FromF);
Close(ToF);
end.
Немає коментарів:
Дописати коментар