以字节形式读取目录

Read a directory as bytes

我正在尝试使用 Archive package 构建存档文件,我需要存档整个目录。

到目前为止,我发现我可以通过这样做来归档单个文件:

io.File file = new io.File(pathToMyFile);
List<int> bytes = await file.readAsBytes();
io.FileStat stats = await file.stat();

Archive archive = new Archive();
archive.addFile(new ArchiveFile.noCompress('config.yaml', stats.size, bytes)
  ..mode = stats.mode
  ..lastModTime = stats.modified.millisecond);

List<int> data = new ZipEncoder().encode(archive, level: Deflate.NO_COMPRESSION);

await new io.File('output.war').writeAsBytes(data, flush: true);

但是要创建一个 ArchiveFile 我需要表示文件的字节,但是我觉得将整个目录作为字节来执行此操作会很好。有没有办法做到这一点? Directory 上的 Dart API 似乎非常有限。

人们通常如何去比方说复制目录?只调用系统 cp ?我的意思是我想要一个可以在多个平台上运行的解决方案。

你递归地一个文件一个文件地做。 Grinder 对此有一个任务,只需看一下实现 https://github.com/google/grinder.dart/blob/devoncarew_0.7.0-dev.1/lib/grinder_files.dart#L189

你得到一个目录下的所有文件

var fileList =
      new io.Directory(path.join(io.Directory.current.absolute.path, 'lib'))
          .list(recursive: true, followLinks: false);

然后您一个接一个地处理文件。