rm static method

bool rm(
  1. List<String> files, {
  2. bool directory = false,
  3. bool force = false,
  4. bool recursive = false,
})

Removes the files and returns true if the operation was successful; otherwise false.

By default, it does not remove directories.

If directory is set to true removes the directories if they are empty.

If force is set to true ignores nonexistent files.

If recursive is set to true remove the directories and their contents recursively.

Implementation

static bool rm(List<String> files,
    {bool directory = false, bool force = false, bool recursive = false}) {
  if (files.isEmpty) {
    return false;
  }

  var result = true;
  for (final file in files) {
    if (file.isEmpty) {
      if (!force) {
        result = false;
      }

      continue;
    }

    final list = glob(file);
    if (list.isEmpty) {
      if (!force) {
        result = false;
      }

      continue;
    }

    for (final name in list) {
      FileSystemEntity? entity;
      var isDirectory = false;
      if (testfile(name, 'link')!) {
        entity = Link(name);
      } else if (testfile(name, 'file')!) {
        entity = File(name);
      } else if (testfile(name, 'directory')!) {
        entity = Directory(name);
        isDirectory = true;
      }

      if (entity == null) {
        if (!force) {
          result = false;
        }
      } else {
        if (isDirectory) {
          if (recursive) {
            try {
              entity.deleteSync(recursive: recursive);
            } catch (e) {
              result = false;
            }
          } else if (directory) {
            result = rmdir([entity.path], parents: true);
          } else {
            result = false;
          }
        } else {
          try {
            entity.deleteSync();
          } catch (e) {
            result = false;
          }
        }
      }
    }
  }

  return result;
}