Справочник по Ada 2012
A.8.2 Управление файлами
Статическая семантика
Процедуры и функции, описанные в этом подпункте, обеспечивают управление внешними файлами; их объявления повторяются в каждом из пакетов для последовательного, прямого, текстового и потокового ввода-вывода. Для текстового ввода-вывода процедуры Create, Open и Reset имеют дополнительные эффекты, описанные в подпункте A.10.2.
procedure Create(File : in out File_Type;
Mode : in File_Mode := default_mode;
Name : in String := "";
Form : in String := "");
Mode : in File_Mode := default_mode;
Name : in String := "";
Form : in String := "");
Создаёт новый внешний файл с заданным именем и формой и связывает этот внешний файл с заданным файлом. Заданный файл остаётся открытым. Текущий режим заданного файла устанавливается в заданный режим доступа. По умолчанию режим доступа — Out_File для последовательного, потокового и текстового ввода-вывода; для прямого ввода-вывода — Inout_File. Для прямого доступа размер созданного файла определяется реализацией.
Пустая строка для Name указывает внешний файл, который недоступен после завершения основной программы (временный файл). Пустая строка для Form указывает использование по умолчанию опций реализации для внешнего файла.
Исключение Status_Error генерируется, если заданный файл уже открыт. Исключение Name_Error генерируется, если строка, заданная как Name, не позволяет идентифицировать внешний файл. Исключение Use_Error генерируется, если для указанного режима внешняя среда не поддерживает создание внешнего файла с заданным именем (в отсутствие Name_Error) и формой.
procedure Open(File : in out File_Type;
Mode : in File_Mode;
Name : in String;
Form : in String := "");
Mode : in File_Mode;
Name : in String;
Form : in String := "");
Связывает заданный файл с существующим внешним файлом с заданным именем и формой и устанавливает текущий режим заданного файла в заданный режим. Заданный файл остаётся открытым.
Исключение Status_Error генерируется, если заданный файл уже открыт. Исключение Name_Error генерируется, если строка, заданная как Name, не позволяет идентифицировать внешний файл; в частности, это исключение генерируется, если внешний файл с заданным именем не существует. Исключение Use_Error генерируется, если для указанного режима внешняя среда не поддерживает открытие внешнего файла с заданным именем (в отсутствие Name_Error) и формой.
procedure Close(File : in out File_Type);
Прекращает связь между заданным файлом и его связанным внешним файлом. Заданный файл остаётся закрытым. Кроме того, для последовательных файлов, если закрываемый файл имеет режим Out_File или Append_File, то последний элемент, записанный с момента последнего открытия или сброса, является последним элементом, который можно считать из файла. Если элементы не были записаны, а режим файла — Out_File, то закрытый файл пуст. Если элементы не были записаны, а режим файла — Append_File, то закрытый файл не изменяется.
Исключение Status_Error генерируется, если заданный файл не открыт.
procedure Delete(File : in out File_Type);
Удаляет внешний файл, связанный с заданным файлом. Заданный файл закрывается, и внешний файл перестаёт существовать.
Исключение Status_Error генерируется, если заданный файл не открыт. Исключение Use_Error генерируется, если удаление внешнего файла не поддерживается внешней средой.
procedure Reset(File : in out File_Type; Mode : in File_Mode);
procedure Reset(File : in out File_Type);
procedure Reset(File : in out File_Type);
Сбрасывает заданный файл, чтобы чтение элементов можно было перезапустить с начала внешнего файла (для режимов In_File и Inout_File) и чтобы запись элементов можно было перезапустить в начале внешнего файла (для режимов Out_File и Inout_File) или после последнего элемента внешнего файла (для режима Append_File). В частности, для прямого доступа это означает, что текущий индекс устанавливается в единицу. Если параметр Mode указан, текущий режим заданного файла устанавливается в заданный режим. Кроме того, для последовательных файлов, если заданный файл имеет режим Out_File или Append_File при вызове Reset, последний элемент, записанный с момента последнего открытия или сброса, является последним элементом, который можно считать из внешнего файла. Если элементы не были записаны, а режим файла — Out_File, то сброшенный файл пуст. Если элементы не были записаны, а режим файла — Append_File, то сброшенный файл не изменяется.
Исключение Status_Error генерируется, если файл не открыт. Исключение Use_Error генерируется, если внешняя среда не поддерживает сброс для внешнего файла и также если внешняя среда не поддерживает сброс в указанный режим для внешнего файла.
function Mode(File : in File_Type) return File_Mode;
Возвращает текущий режим заданного файла.
Исключение Status_Error генерируется, если файл не открыт.
function Name(File : in File_Type) return String;
Возвращает строку, которая однозначно идентифицирует внешний файл, в настоящее время связанный с заданным файлом (и может быть использована в операции Open).
Исключение Status_Error генерируется, если заданный файл не открыт. Исключение Use_Error генерируется, если связанный внешний файл является временным файлом, который не может быть открыт ни под каким именем.
function Form(File : in File_Type) return String;
Возвращает строку формы для внешнего файла, в настоящее время связанного с заданным файлом. Если внешняя среда допускает альтернативные задания формы (например, сокращения с использованием параметров по умолчанию), возвращаемая функцией строка должна соответствовать полному заданию (то есть она должна явно указывать все выбранные параметры, включая параметры по умолчанию).
Исключение Status_Error генерируется, если заданный файл не открыт.
function Is_Open(File : in File_Type) return Boolean;
Возвращает True, если файл открыт (то есть если он связан с внешним файлом); в противном случае возвращает False.
procedure Flush(File : in File_Type);
Процедура Flush синхронизирует внешний файл с внутренним файлом (путем сброса любых внутренних буферов) без закрытия файла. Для прямого файла текущий индекс не изменяется; для потокового файла (см. A.12.1) текущая позиция не изменяется.
Исключение Status_Error генерируется, если файл не открыт. Исключение Mode_Error генерируется, если режим файла In_File.
Реализационные разрешения
Реализация может генерировать Name_Error или Use_Error, если предпринимается попытка использовать функцию ввода-вывода, которую реализация не может поддерживать из-за ограничений внешней среды. Любое такое ограничение должно быть задокументировано.