Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Ввод и вывод
Удаление файлов и каталогов
Подобно тому как spurt и mkdir создают
что-то на диске, две процедуры это удаляют.
Процедура unlink удаляет файл:
spurt 'temp.txt', 'scratch data';
say 'temp.txt'.IO.e; # True
unlink 'temp.txt';
say 'temp.txt'.IO.e; # Falseunlink удаляет названный файл. Как и другие процедуры
для файловой системы, она имеет и форму метода у объекта пути —
'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 упражнения. Прежде чем приступать к практике, изучите все темы раздела.