wipe method

Stream<Es> wipe([
  1. List<String> levels = const []
])

secure wipe files

  • levels: security levels for file overwrite.

available levels: low file overwritten with zeros (0); medium (default) file overwritten with random bits (0|1); high file overwritten with random bytes (0-255).

final source = '~/Downloads/temp/ft.tgz';
final action = BasicPathAction(source);

action.wipe();

Implementation

Stream<Es> wipe([List<String> levels = const []]) {
  final action = PathAction.wipe.name, chk = 'validator';
  argErr ??= validator();
  if (argErr!.isNotEmpty) throw ArgumentError.value(argErr, action, chk);

  final fields = fieldsFromOptions(fmtFields);
  final fseType = FileSystemEntityType.file;

  final stream = scEntity.stream;
  final fStream =
      stream.where((event) => event.fs.type == fseType).asBroadcastStream();
  late StreamSubscription subs;
  subs = fStream.listen(
    (event) {
      final (entity, stat, extra) = event.asRecord;
      var ok = false;
      var autoDelete = levels.length == 1 ? true : false;
      var file = File(entity.path);
      try {
        for (var level in levels) {
          logger.trace('d, $action, level:$level, ${entity.path}');
          ok = fileOverWrite(
            file,
            isFileExist: true,
            autoDelete: autoDelete,
            level: FileWriteLevel.values.byName(level),
          );
        }
        if (!autoDelete) file.deleteSync();
      } catch (e, s) {
        logger.stderr('e, $action, data, secure ${entity.path}');
        scEntity.addError(e, s);
      }

      final line =
          Formatter(entity, stat, extra, action, shows: fields, ok: ok);
      logger.stdout(line.toString());
    },
    cancelOnError: cancelOnError,
    onDone: () => logger.trace('d, $action, done.'),
    onError: (e, s) {
      if (cancelOnError) {
        exitCode = ExitCodeExt.error.code;
        subs.cancel();
      }

      logger
        ..trace('d, $action, cancelOnError:$cancelOnError')
        ..stderr('e, $action, error. $e')
        ..stderr(kIsDebug ? '$s' : '');
    }, // onError
  );
  return fStream;
}