Ілюстрований самовчитель з Perl › Робота з файлами › Операції з каталогами сторінка - 98,
Операції з каталогами
Як ми зазначали раніше, UNIX каталоги є файлами спеціального формату, поміченими в структурах своїх індексних дескрипторів як каталоги (поле rdev). Вміст блоків даних каталогів є безліч пар, що складаються з об'єкта, що міститься в каталозі, і числового значення його індексного дескриптора.
Для роботи з каталогами в Perl передбачені функції відкриття, закриття та читання вмісту каталогу, синтаксис та семантика яких аналогічні синтаксису та семантики відповідних операцій з файлами:
Доступ до вмісту каталогу здійснюється, як і у випадку з файлом, через створюваний функцією opendir()дескриптор каталогу. Зазначимо, що для дескрипторів каталогів у таблиці символів Perl створюється власний простір імен. Це означає, що у програмі можуть існувати, зовсім не конфліктуючи між собою, дескриптори файлу та каталогу з однаковими іменами:
Зауваження Використання однакових імен для дескрипторів файлу та каталогу може заплутати самого користувача. Проте для perl такої проблеми немає: інтерпретатор завжди точно знає, який дескриптор слід використовувати.
Функцією rewinddir() поточна позиція в каталозі встановлюється спочатку, що дозволяє здійснювати повторне читання імен файлів каталогу, не закриваючи його. Єдиним параметром цієї функції є дескриптор відкритого каталогу.
Програма прикладу 7.8 перевіряє, чи є всі файли каталогу двійковими (вміст вкладених каталогів не перевіряється).
Функція readdir() повертає відносне ім'я файлу. Для отримання повного імені файлу слід створити його у програмі самостійно. Наприклад, додати ім'я каталогу, що перевіряєтьсяу прикладі 7.8:
Для створення нового каталогу слід скористатися функцією mkdiro, параметрами якої є ім'я каталогу та режим доступу (вісімкове число):
Якщо не повне ім'я каталогу, то він створюється в поточному каталозі, що встановлюється функцією chdir(). Значення, що повертається, функції створення нового каталогу mkdir () є Істина, якщо каталог створений, і Брехня, якщо сталася якась помилка. В останньому випадку у спеціальній змінній $! зберігається пояснення не виконання операції створення каталогу.
Рада Для каталогів рекомендується задавати режим доступу рівним 0777.
Видалити каталог можна функцієюrmdir() з параметром, що містить рядок з ім'ям каталогу. Якщо параметр не заданий, використовується спеціальна змінна $_. Як і функція створення каталогу, ця функція повертає значення Істина у разі успішного видалення каталогу та Брехня в іншому випадку, записуючи в змінну $! пояснення помилки.
Зауваження Функція rmdir () видаляє лише порожній каталог. Якщо він містить інші порожні каталоги, їх треба видалити раніше.