14 · Файловая система
Оператор CLOSE
Открытый файл удерживает ресурс и часть записанного текста до тех пор, пока запись не будет завершена. CLOSE закрывает открытый текстовый файл: передаёт в поток накопленные байты и освобождает переменную FILE, после чего её снова можно открыть оператором OPEN.
Синтаксис
Оператор состоит из ключевого слова CLOSE и имени файловой переменной.
CLOSE <файл>Он завершает текущий период работы с файлом, поэтому применяется к ресурсу, ранее открытому оператором OPEN, и доступен в любом выполняемом участке программы без SCREEN.
Аргумент
Файл — простая переменная типа FILE, содержащая открытый ресурс. Выражение пути, поле записи и список нескольких файлов не являются этой формой.
Действие и ограничения
Накопленные байты передаются в поток, затем ресурс освобождается. После успешного закрытия ISOPEN возвращает FALSE; остальные файловые функции, требующие открытого ресурса, недоступны до нового OPEN. Повторное закрытие недопустимо.
Даже при ошибке завершения записи ресурс освобождается. Часть текста могла не сохраниться; повторять CLOSE для этого ресурса не нужно. При завершении запуска исполнитель пытается закрыть все оставшиеся ресурсы, и отказ одного закрытия не отменяет другие попытки.
Проверить момент освобождения позволяет ISOPEN до и после закрытия:
DIM path AS STRING = MAKETEMPFILE("manual_")
DIM f AS FILE
OPEN path FOR OUTPUT AS f
WRITE(f, "Axiom")
PRINT ISOPEN(f)
CLOSE f
PRINT ISOPEN(f)
PRINT READFILE(path)
DELETEFILE(path)Ожидаемый вывод:
TRUE
FALSE
AxiomПервое значение TRUE относится к ещё открытому ресурсу. Второе FALSE появляется уже после CLOSE, а третья строка показывает, что записанный текст к этому моменту находится в файле и доступен обычному чтению по пути.
Диагностика
MB2003 означает переменную другого типа. MB3007 возникает при закрытии неоткрытого ресурса и при ошибке завершения записи; такую ошибку можно перехватить через TRY.
См. также
OPEN · Функции FILE · TRY