copy method
Implementation
Future<FileSystemEntity> copy(String source, String target) =>
entity(source).then((e) async {
if (e is File) {
return e.copy(target);
} else if (e is Directory) {
if (p.canonicalize(source) == p.canonicalize(target)) {
return e;
}
if (p.isWithin(source, target)) {
throw ArgumentError('Cannot copy $source to $target');
}
final dir = directory(target);
await dir.create(recursive: true);
await for (final sub in e.list(recursive: true, followLinks: false)) {
final copyTo = p.join(target, p.relative(sub.path, from: source));
if (sub is Directory) {
await directory(copyTo).create(recursive: true);
} else if (sub is File) {
await file(sub.path).copy(copyTo);
} else if (sub is Link) {
await link(copyTo).create(await sub.target(), recursive: true);
}
}
return dir;
} else if (e is Link) {
return link(target).create(await e.target(), recursive: true);
} else {
throw FileSystemException('No such file or directory', source);
}
});