Робота з нетипізованими файлами

Нетипізовані файли відрізняються тим, що для їх компонентів не вказано тип. Відсутність типу робить ці файли, з одного боку, сумісними з любими іншими файлами, а з іншого – дозволяє організувати швидкий обмін даними між пам’яттю та диском. 
При ініціалізації нетипізованих файлів процедурами 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. 

Немає коментарів:

Дописати коментар