rmdir static method

bool rmdir(
  1. List<String> names, {
  2. bool parents = false,
})

Removes empty directories. Returns true if the operation was successful; otherwise false.

Implementation

static bool rmdir(List<String> names, {bool parents = false}) {
  late bool Function(String) canDelete;
  canDelete = (String name) {
    final directory = Directory(name);
    for (final entry in directory.listSync()) {
      if (entry is File) {
        return false;
      } else if (entry is Link) {
        return false;
      } else if (entry is Directory) {
        if (!canDelete(entry.path)) {
          return false;
        }
      } else {
        return false;
      }
    }

    return true;
  };

  if (names.isEmpty) {
    return false;
  }

  var result = true;
  for (var name in names) {
    name = name.toString();
    if (name.isEmpty) {
      result = false;
      continue;
    }

    final list = glob(name);
    if (list.isEmpty) {
      result = false;
      continue;
    }

    for (final name in list) {
      if (testfile(name, 'file')!) {
        result = false;
        continue;
      } else if (testfile(name, 'link')!) {
        result = false;
        continue;
      } else if (!testfile(name, 'directory')!) {
        result = false;
        continue;
      }

      if (dirempty(name)) {
        try {
          Directory(name).deleteSync();
        } catch (e) {
          result = false;
        }
      } else {
        if (parents) {
          if (!canDelete(name)) {
            result = false;
          } else {
            try {
              Directory(name).deleteSync(recursive: true);
            } catch (e) {
              result = false;
            }
          }
        } else {
          result = false;
        }
      }
    }
  }

  return result;
}