wipe method
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;
}