Справочник по Ada (Ada 2022)
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.
Вложенный пакет Wide_File_Names предоставляет операции, эквивалентные операциям того же имени внешнего пакета, за исключением того, что Wide_String используется вместо String для имени и формы внешнего файла.
Вложенный пакет Wide_Wide_File_Names предоставляет операции, эквивалентные операциям того же имени внешнего пакета, за исключением того, что Wide_Wide_String используется вместо String для имени и формы внешнего файла.
Разрешения реализации
Реализация может генерировать Name_Error или Use_Error, если попытка использовать функцию ввода-вывода не может быть поддержана реализацией из-за ограничений во внешней среде. Любое такое ограничение должно быть задокументировано.