copy method

Future<FileSystemEntity> copy(
  1. String source,
  2. String target
)

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);
      }
    });