Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц по Visual Prolog.doc
Скачиваний:
4
Добавлен:
02.05.2019
Размер:
937.47 Кб
Скачать

9.5. Закриття файлу

Після закінчення роботи з файлом файл обов’язково треба закрити. Запис значень змінних на диск проводиться через буфер (область оперативної пам’яті). Файлова система слідкує за заповненням буфера і автоматично, непомітно для користувача записує заповнений буфер на диск. Часто залишок даних не заповнює буфер і тому залишок виводиться тільки при закритті файлу.

При закритті файлу виконуються наступні дії:

  1. Виводиться залишок буфера з даними в файл на диск.

  2. Корегуються відомості про кількість байтів у файлі в каталогу.

  3. Очищується область з символічним ім'ям файлу і розривається зв’язок між символічним ім’ям файлу і файлом на диску.

Закриття файлу виконується предикатом

closefile (Символічне ім'я).

Приклад: closefile (f)

Предикат Flush (Символічне ім'я)

Дозволяє вручну вивести незаповнений буфер в файл на диск.

Приклад: flush(f)

Предикат очищує буфери системи.

9.6. Предикати роботи з каталогами

Предикати роботи з каталогами працюють з ім'ям файлу в операційній системі. Файли повинні бути закритими.

Предикат existfile (Ім'я файлу в ОС)

(і)

Перевіряє, чи існує файл на вказаному диску за вказаним шляхом. Предикат істинний, якщо файл знайдено. Предикат не знаходить каталоги. В рядку, що задає шлях „\” вказують двічі.

Приклад: existfile("d:\\program\\Prolog\\v\\h1.dat").

Предикат disk (Шлях)

Режими: (і) - робить диск та каталог поточними

(о) – повертає поточні диск і каталог

Приклад: disk(“d:\ \prolog”)

Предикат deletefile (Ім'я файлу в ОС)

Вилучити файл з вказаного диску за вказаним шляхом.

Приклад: deletefile(“a:G.dat”)

Предикат renamefile (Старе ім'я, Нове ім'я)

Перейменує файл на вказаному диску за вказаним шляхом. Предикат істинний, якщо новий файл не існує.

Приклад: renamefile (“g1.dat”,”g2.dat”)

Предикат searchfile (Список шляхів, Ім’я файлу, Змінна)

(і, і, o)

Предикат знаходить серед вказаного списку шляхів потрібне ім'я файлу і повертає ім’я разом зі шляхом. Список шляхів задають через „;”.

Приклад: do:-searchfile(“d:\\; c:\\”, “F.asc”, T), write(T).

Процедура do виводить ім’я файлу разом зі шляхом.

Предикат copyfile ( Ім’я файлу, Ім’я копії файлу)

(і,і)

Предикат копіює файл і надає копії вказане ім’я. Копія має такі атрибути як оригінал.

9.7. Предикати, що працюють з атрибутами файлів

Фізичні файли на диску можуть мати атрибути: архівний, схований, системний. Такі атрибути визначають дії системи відносно файлу. Крім того, атрибути файлу визначають дозволений доступ до файлу користувача(access modes): „тільки для читання”, „для читання і запису”, „тільки для запису”. Для файлів, що використовують декілька користувачів(sharing modes), існують атрибути, які вказують чи може інший процес відкрити цей файл з певним атрибутом.

Предикат openfile (Символічне ім’я, І’мя файлу в ОС,

Режими доступу і розподілу для файлу,

Фізичні атрибути файлу,

Дії при відсутності або наявності файлу.

(і, і, і, і, і)

Відкриває файл для утворення з вказівкою атрибутів.

Режими доступу і розподілу для файлу – формується з об’єднання по одному атрибуту з груп fm_access_XX i fm_ sh_XXXX і, необов’язково з атрибутів fm_returnerr, fm_writethru.

Для режиму доступу fm_access ХХ може бути:

  • Ro відкрити тільки для читання;

  • Wo відкрити тільки для запису;

  • Rw відкрити для читання і запису.

Для режиму розподілу fm_ sh XXXX може бути:

  • fm_sh_denyrw відмова читати/писати;

  • fm_sh_denywr відмова писати;

  • fm_sh_denyrd відмова читати;

  • fm_sh_denyno відмов нема.

Обробка помилок:

  • fm_returnerr повертати помилку

  • fm_writethru вивід на

Фізичні атрибути файлу:

  • fa_normal на читання і запис нема обмежень;

  • fa_rdonly тільки читати;

  • fa_hidden схований файл;

  • fa_system системний файл;

  • fa_subdir підкаталог;

  • fa_arch архівний файл.

Дії при наявності файлу з вказаним ім’ям (утворення прапорців):

  • cr_ex_fail якщо файл існує, генерирувати помилку OS;

  • cr_ex_open файл, що існує, відкритий;

  • cr_ex_replace якщо файл існує, замінити;

Дії при відсутності файлу з вказаним ім’ям(утворення прапорців:

  • cr_noex_fail генерує помилку, якщо файл не існує;

  • cr_noex_create утворити файл, якщо він не існує;