Библиотеки » Ввод-вывод (dart:io) » Directory » delete
функция Directory::delete
Асинхронное удаление директорий в файловой системе
Синтаксис
Future[Directory]
Directory.delete
(bool recursive)
Передаваемые параметры
bool recursiveВозвращаемое значение
Future[Directory]Описание
Метод delete
позволяет асинхронно удалить директорию но основе указанного пути.
После вызова данного метода, управление не блокируется, а сразу же возвращается в основной поток, и в качестве результата отдается объект типа Future
, который орбрабатывает результат выполнения функции - успешное удаление директории или возникшие ошибки во время удаления.
Если рекурсивное удаление отключено - recursive: false
, то для корректного удаления - папка должна быть пуста. В случае, когда рекурсивное удаление включено - recursive: true
, каталог будет удален, включая все содержимое - файлы и вложенные каталоги
Заметки
Примеры использования:
import "dart:io";
// функция для поиска и удаления директорий с помощью регулярного выражения
void directoryDelete(Directory baseDirectory, RegExp selector) {
// получаем итератор для вложенных директорий
DirectoryLister lister = baseDirectory.list(recursive: true);
// назначаем обработчик для полученных директорий
lister.onDir = (String directory) {
// сравниваем директорию с регулярным выражением
if (selector.hasMatch(directory)) {
print ("найдена директория - ${directory}");
// если совпадение, то асинхронно удаляем
new Directory(directory).delete(recursive: true).onComplete((Future<Directory> future) {
if (future.hasValue) {
print ("удалена директория - ${future.value.path}");
} else {
print ("возникла ошибка при удалении директории - ${future.exception.path}");
}
});
}
};
}
void main() {
// удалим все директории "*test*" с помощью нашей функции directoryDelete
directoryDelete(new Directory("D:\\TEST\\bootstrap-2.1.1\\"), new RegExp(r"test"));
// создадим какой-ниудь временный каталог в системном каталоге
Directory folderToDelete1 = new Directory("").createTempSync();
if (folderToDelete1.existsSync()) {
// создание прошло успешно, директория создана
// выведем путь на экран
print(folderToDelete1.path);
// будет выведен примерно следущий путь
// ./temporary-03d441ad-55ca-11e2-bdf0-efbc588db635
// удалим наш временный каталог
Future<Directory> folderDeleted1 = folderToDelete1.delete();
folderDeleted1.onComplete((Future<Directory> future) {
if (future.hasValue) {
// удаление прошло успешно, директория отсутствует
print(future.value.existsSync());
} else {
// выведим ошибку, если вдруг возникнет в процессе создания
print(future.exception);
}
});
}
// создадим еще какой-ниудь временный каталог в системном каталоге
Directory folderToDelete2 = new Directory("").createTempSync();
// добавим несколько вложенных каталогов
for(int i = 0; i<5; i++) {
Directory sub01 = new Directory.fromPath(new Path(folderToDelete2.path).append("sub{$i}"));
sub01.createSync();
}
// попробуем удалить временный каталог
Future<Directory> folderDeleted2 = folderToDelete2.delete(recursive: false);
folderDeleted2.onComplete((Future<Directory> future) {
if (!future.hasValue) {
// выведим ошибку, которая возникла, потому что мы попытались удалить
// директорию с вложенными директориями, но с отключенным рекурсивным удалением
print(future.exception);
// теперь удалим рекурсивно
folderToDelete2.delete(recursive: true).then((Directory value) {
print("удаление прошло успешно");
});
}
});
}