функция 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("удаление прошло успешно");
      });
    }
  });
}
						

Официальная документация (английский)