Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Ввод и вывод

Удаление файлов и каталогов

Подобно тому как spurt и mkdir создают что-то на диске, две процедуры это удаляют.

Процедура unlink удаляет файл:

spurt 'temp.txt', 'scratch data';
say 'temp.txt'.IO.e; # True

unlink 'temp.txt';
say 'temp.txt'.IO.e; # False

unlink удаляет названный файл. Как и другие процедуры для файловой системы, она имеет и форму метода у объекта пути — 'temp.txt'.IO.unlink.

Удаление происходит немедленно и безвозвратно: никакой корзины, из которой можно было бы восстановить файл, нет. Заметьте, что после исчезновения файла проверять его нужно через .e (существование), а не через .f, потому что проверки типа .f и .d бросают исключение, когда пути нет.

Процедура rmdir удаляет каталог, но только пустой:

mkdir 'reports';
rmdir 'reports';
say 'reports'.IO.e; # False

Если в каталоге ещё что-то есть, rmdir ничего не удаляет и оставляет его на месте. Поэтому, чтобы удалить каталог с файлами, его сначала опустошают, а потом удаляют:

mkdir 'reports';
spurt 'reports/jan.txt', 'January';
spurt 'reports/feb.txt', 'February';

.unlink for 'reports'.IO.dir;   # удаляем все записи
rmdir 'reports';                # теперь каталог пуст
say 'reports'.IO.e;             # False

'reports'.IO.dir перечисляет записи каталога (об этом была предыдущая тема), а вызов .unlink у каждой из них их удаляет. Как только каталог опустел, rmdir может его убрать. (Этот плоский цикл предполагает, что в каталоге лежат только файлы; для дерева с вложенными подкаталогами пришлось бы сначала спуститься в них рекурсивно.)

Практика

Пройдите 1 тест по содержанию этой темы.

Упражнения

В этом разделе 2 упражнения. Прежде чем приступать к практике, изучите все темы раздела.

  1. Удалите файл
  2. Очистите каталог

Навигация по курсу

Решение: Файл или каталог?   |   Удалите файл