Каталог программирование


Ada. Проверено временем, надежно и надежно.

Эта языковая функция доступна только с Ada 2005.

Ada.Directory является единицей предопределенной языковой среды с Ada 2005 года. Он позволяет различные манипуляции и запросы каталогов файловой системы.

Каталоги пакетов

Используется для простой манипуляции с каталогом. Как определено в Ada 2005.

Обход каталогов

Изменение текущего рабочего каталога сделано Set_Directory. Остальные функции достаточно понятны . За исключениемContaining_Directory, который возвращает имя каталога. Содержащего данный каталог.

 function Current_Directory return Струна; procedure Set_Directory (Каталог: in Строка); function Существует (Имя: in Струна) return Булево; function Containing_Directory (Имя: in Струна) return Струна; 

Перечисление записей каталога

В этом примере перечисляются все записи в текущем рабочем каталоге. Которые заканчиваются на

Эта Start_Searchпроцедура используется для начала перечисления каталога. Он будет удалять критерии фильтра. Которые вы можете передать пустой строкой. Итерация по каталогу включает в себя вызов Get_Next_Entryдля возврата следующей записи каталога и More_Entriesпроверки наличия дополнительных записей. Как только поиск будет завершен, позвоните

End_Search.

 type Search_Type is limited private; type Directory_Entry_Type is limited private; procedure Start_Search (Поиск: in out Search_Type; Каталог: in Строка; Шаблон: in Строка; Фильтр: in Filter_Type := (others  Правда)); procedure Get_Next_Entry (Поиск: in out Search_Type; Directory_Entry: out Directory_Entry_Type); function More_Entries (Поиск: in Search_Type) return Булево; procedure End_Search (Поиск: in out Search_Type); 

Полученный Directory_Entry_Type имеет полное имя. Простое имя, размер. Вид и тип модификации.

 function Simple_Name (Directory_Entry: in Directory_Entry_Type) return Струна; function Full_Name (Directory_Entry: in Directory_Entry_Type) return Струна; function Вид (Directory_Entry: in Directory_Entry_Type) return File_Kind; -- Каталог. Ordinary_File. Special_File function Размер (Directory_Entry: in Directory_Entry_Type) return File_Size; function Modification_Time (Directory_Entry: in Directory_Entry_Type) return Ada.Calendar.Time; 
with Ada.Text_IO; with Ada.Каталоги; use Ada.Text_IO; use Ada.Каталоги; procedure Главная is Dir : Directory_Entry_Type; Dir_Search : Search_Type; Curr_Dir : string := Current_Directory; begin Put("Current Directory:"); Put_Line(Curr_Dir); Start_Search(Search =>> Dir_Search, Directory =>> Curr_Dir, Pattern =>> "*.gpr"); loop Get_Next_Entry(Dir_Search, Dir); Put(Full_Name(Dir)); Set_Col(50); if Kind(Dir) = Ordinary_File then Put(Size(Dir)'Image); end if; Set_Col(60); Put_Line(Kind(Dir)'Image); exit when not More_Entries(Dir_Search); end loop; End_Search(Dir_Search); end Главная; 

Управление каталогом

Создание каталога выполняется с Create_Directoryпомощью . Create_Path создает все каталоги в пути. Путь к каталогу в GNAT Ada может содержать символы Rename переименовывает каталог или файл в каталоге. Delete_Directory удаляет пустой каталог (непустые каталоги выбрасывают Use_Errorисключение. Delete_File удаляет обычный файл в каталоге. Обратите внимание. Что Formпараметры зависят от конкретной реализации. В версии GNAT Ada. Которую я использую. Ее можно использовать только для установки кодировки.

 procedure Create_Directory (New_Directory: in Строка; Форма: in Строка := ); procedure Create_Path (New_Directory: in Строка; Форма: in Строка := ); procedure Переименовать (Old_Name, New_Name: in Строка); 
 procedure Delete_Tree (Каталог: in Строка); procedure Delete_Directory (Каталог: in Строка); procedure Delete_File (Имя: in Строка); 

Ниже приведен простой пример. Который создает набор каталогов и выполняет итерацию по этим каталогам. Обратите внимание. Что он работает как в Windows. Так и в Linux с разделителем путейВозвращаемые разделители путей соответствуют файловой системе (например. Windows возвращает

procedure Главная is Dir : Directory_Entry_Type; Dir_Search : Search_Type; begin Start_Search(Search =>> Dir_Search, Directory =>> Curr_Dir, Pattern =>> ""); Create_Path("Foo"); Create_Path("Bar/Baz/Qux"); loop Get_Next_Entry(Dir_Search, Dir); Put_Line(Full_Name(Dir)); exit when not More_Entries(Dir_Search); end loop; End_Search(Dir_Search); Delete_Directory("Foo"); Delete_Tree("Bar"); end Главная; 

Status_Error вызывается. Если запись каталога недопустима или при перечислении каталогов после последнего каталога. Name_Error обычно выбрасывается. Если каталог или имя файла не может идентифицировать файл или каталог (либо несуществующий. Либо недействительный в зависимости от контекста). Use_Error бросается. Если каталоги не поддерживаются или каталоги не проходимы.

 Status_Error: exception renames Ada.IO_Exceptions.Status_Error; Name_Error: exception renames Ada.IO_Exceptions.Name_Error; Use_Error: exception renames Ada.IO_Exceptions.Use_Error; Device_Error: exception renames Ada.IO_Exceptions.Device_Error; 
-- Стандарт Ады библиотека спецификация  -- Авторское право (c) 2004-2016 топор консультанты -- Авторское право (c) 2004, 2005, 2006 Ада-Европа -- Авторское право (c) 2000 Митре Корпорейшн, Инк. -- Авторское право (c) 1992, 1993, 1994, 1995 Intermetrics. Инк. -- SPDX-лицензия-идентификатор: под BSD-3-clause и LicenseRef-AdaReferenceManual -- ------------------------------------------------------------------------- with Ада.Календарь; with Ada.IO_Exceptions; package Ada.Каталоги is -- Операции с каталогами и файлами: function Current_Directory return Струна; procedure Set_Directory (Каталог: in Строка); procedure Create_Directory (New_Directory: in Строка; Форма: in Строка := ); procedure Delete_Directory (Каталог: in Строка); procedure Create_Path (New_Directory: in Строка; Форма: in Строка := ); procedure Delete_Tree (Каталог: in Строка); procedure Delete_File (Имя: in Строка); procedure Переименовать (Old_Name: in String; New_Name: in Строка); procedure Copy_File (Source_Name: in Строка; Target_Name: in Строка; Форма: in String := ); -- Операции с именами файлов и каталогов: function Full_Name (Имя: in Струна) return Струна; function Simple_Name (Имя: in Струна) return Струна; function Containing_Directory (Имя: in Струна) return Струна; function Расширение (Имя: in Струна) return Струна; function Base_Name (Имя: in Струна) return Струна; function Compose (Containing_Directory: in Строка := ; Имя: in Строка; Расширение: in Строка := ) return Строка; -- Запросы файлов и каталогов: type File_Kind is (Каталог, Ordinary_File, Special_File); type File_Size is range 0 .. implementation_defined; function Существует (Имя: in Струна) return Логическое значение; function Вид (Имя: in Струна) return File_Kind; function Размер (Имя: in Струна) return File_Size; function Modification_Time (Имя: in Струна) return Ada.Calendar.Time; -- Поиск по каталогу: type Directory_Entry_Type is limited private; type Filter_Type is array (File_Kind) of Булево; type Search_Type is limited private; procedure Start_Search (Поиск: in out Search_Type; Каталог: in Строка; Шаблон: in Строка; Фильтр: in Filter_Type := (others  Верно)); procedure End_Search (Поиск: in out Search_Type); function More_Entries (Поиск: in Search_Type) return Логическое значение; procedure Get_Next_Entry (Поиск: in out Search_Type; Directory_Entry: out Directory_Entry_Type); procedure Поиск (Каталог: in Строка; Шаблон: in Строка; Фильтр: in Filter_Type := (others  True); Процесс: not null access procedure (Directory_Entry: in Directory_Entry_Type)); -- Операции с записями каталога: function Simple_Name (Directory_Entry: in Directory_Entry_Type) return Струна; function Full_Name (Directory_Entry: in Directory_Entry_Type) return Струна; function Вид (Directory_Entry: in Directory_Entry_Type) return File_Kind; function Размер (Directory_Entry: in Directory_Entry_Type) return File_Size; function Modification_Time (Directory_Entry: in Directory_Entry_Type) return Ada.Calendar.Time; Status_Error: exception renames Ada.IO_Exceptions.Status_Error; Name_Error: exception renames Ada.IO_Exceptions.Name_Error; Use_Error: exception renames Ada.IO_Exceptions.Use_Error; Device_Error: exception renames Ada.IO_Exceptions.Device_Error; private pragma Импорт (Ada, Directory_Entry_Type); pragma Импорт (Ada, Search_Type); end Ada.Каталоги; 

Wikibook

Внешние примеры

Учебники

Справочное руководство Ada

Ada 2005

Ada 2012

Реализации с открытым исходным

ФСФ КОМАР

селезень