Змінна файлового типу містить інформацію про
структуру файлу та його місцезнаходження.
Структура файлу визначається
типом файлової змінної (дивись попередній приклад), а для визначення
місцеположення файлу необхідно зв’язати змінну з конкретним файлом за
допомогою процедури assign. Коли зв’язок файлової змінної із зовнішнім
файлом встановлено, то для підготовки файлу до виконання операцій вводу/виводу
його необхідно відкрити.
Файл, що вже існує можна відкрити за
допомогою процедури reset, а новий файл можна створити і відкрити за
допомогою процедури rewrite.
При цьому завжди слід пам’ятати, що текстові
файли, відкриті за допомогою процедури reset доступні лише для читання, а
відкриті за допомогою процедури rewrite доступні лише для запису.
Крім того при роботі з текстовими файлами можна використовувати процедуру append.
Ця процедура дозволяє відкрити текстовий файл в режимі доповнення (запису
інформації в кінець файлу).
Типізовані і не типізовані файли дозволяють роботу як в режимі читання,
так і в режимі запису незалежно від того, якою процедурою вони були відкриті
(rewrite чи reset).
Коли запускається будь-яка програма, то завжди автоматично
відкриваються два стандартних файли input та output (ввід та вивід).
Зазвичай
input – це файл зв’язаний з клавіатурою. Він доступний лише для читання.
Файл
output зазвичай зв’язаний з монітором. Цей файл доступний лише для запису.
Доступ до інформації, що міститься в файлі, організується, як правило,
послідовно за допомогою стандартних процедур read та write.
Однак при роботі
з типізованими і не типізованими файлами можна організувати прямий доступ
до заданого елементу файлу за допомогою процедури seek.
Поточну позицію в
файлі можна визначити з допомогою стандартної функції filepos, а розмір
файлу за допомогою стандартної функції filesize.
Після того, як програма завершить роботу з файлом, його необхідно
закрити за допомогою процедури close.
Після цього файлова змінна може бути
зв’язана з іншим файлом.
Нижче наведено основні процедури та функції для роботи з файлами:
assign(var f; name:string) – процедура, що зв’язує файлову змінну f з
конкретним файлом, шлях до якого задано у рядковій змінній name;
chdir(s:string) – процедура, що робить поточним каталог, ім’я якого задане
у рядковій змінній s;
close(var f) – процедура, що закриває файл зв’язаний з файловою змінною
f;
erase(var f) – процедура, яка знищує файл зв’язаний з файловою змінною f;
getdir(d:byte; var s:string) – записує у рядок s назву поточного каталогу на
вказаному диску d;
mkdir(s:string) – процедура, що створює каталог з назвою заданою у
рядковій змінній s;
rename(var f; newname:string) – процедура, що змінює ім’я файла,
зв’язаного з файловою змінною f, на ім’я задане у рядковій змінній newname;
reset(var f) – процедура, яка відкриває існуючий файл, зв’язаний з
файловою змінною f;
rewrite(var f) – процедура, що створює новий файл, зв’язаний з файловою
змінною f;
rmdir(s:string) – дана процедура знищує каталог, ім’я якого задане у
рядковій змінній s, якщо він не містить файлів;
seek(var f; n: longint) – ця процедура переміщує покажчик поточної позиції
файлу, зв’язаного з файловою змінною f, у позицію з номером n. Дана
процедура не може використовуватись при роботі з текстовими файлами;
truncate(var f) – процедура, що відрізає файл, зв’язаний з файловою змінною
f до поточної позиції. Вся інформація, яка знаходилась у файлі після цієї позиції
знищується;
eof(var f) – функція, що повертає значення “true”, якщо досягнуто кінець
файлу, зв’язаного з файловою змінною f або “false” у протилежному випадку;
filepos(var f) – функція, яка повертає поточну позицію у файлі, зв’язаному з
файловою змінною f. Функція не може бути використана при роботі з
текстовими файлами;
filesize(var f) – функція, що повертає поточний розмір файлу, зв’язаного з
файловою змінною f. Функція не може бути використана при роботі з
текстовими файлами;
ioresult – функція, яка повертає ціле значення, що характеризує стан
останньої операції вводу-виводу.
Зазвичай при всіх зверненнях до стандартних функцій та процедур вводу/виводу
автоматично виконується перевірка на наявність помилок. При
наявності помилки програма завершує роботу і виводить на дисплей повідомлення про помилку. За допомогою директив компілятора {$I+} та {$I-}
цю автоматичну перевірку можна включити чи виключити. Коли автоматична
перевірка виключена (директива {$I-}), помилки вводу-виводу, що виникають
при роботі програми, не приводять до її зупинки. При цьому можна виконати
перевірку результату операції за допомогою функції ioresult і запрограмувати
потрібну реакцію програми на помилку.
Наприклад:
uses crt;
var
f : file of string; {файлова змінна типу файл рядків}
buf,buf1: string;
begin
clrscr;
assign(f,'myfile.dat'); {зв’язуємо файлову змінну f з файлом myfile.dat,
який знаходиться в поточному каталозі}
{$I-} {відключаємо автоматичний контроль помилок вводу-виводу}
reset(f); {відкриваємо файл myfile.dat}
{$I+} {поновлюємо режим автоматичного контролю помилок вводу/виводу}
{аналізуємо стан виконання команди reset}
if (ioresult<>0) then
{якщо виникла помилка (тобто такого файлу немає) виводимо на екран
повідомлення про помилку і створюємо потрібний файл}
begin
writeln('File not found, creating new file'); {}
rewrite(f) ;
end
else
{в противному випадку виводимо на екран повідомлення про успішне
відкриття файлу}
begin
writeln('File opening successfuly!');
end;
seek(f,filesize(f)); {переводимо покажчик поточної позиції файлу у
кінець файлу}
buf:='Hello, World !';
writeln('Writing to file: ',buf); { повідомляємо про запис до файлу}
write(f,buf); {записуємо у кінець файлу рядок buf}
writeln;
writeln('Reading from file: '); {повідомляємо про читання інформації з
файлу}
seek(f,0); {переходимо у початок файлу}
while( not eof(f)) do {поки не досягнемо кінця файлу виконуємо
вказані нижче дії}
begin
read(f,buf1); {читаємо інформацію з файлу порядково}
writeln(buf1); {виводимо прочитану інформацію на екран}
end;
close(f); {закриваємо файл myfile.dat}
readkey;
end.
Немає коментарів:
Дописати коментар