以字节形式读取目录

时间:2015-04-14 15:13:05

标签: io dart

我正在尝试使用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我需要代表该文件的字节,但是我觉得将整个目录作为Bytes这样做会很好。有没有办法做到这一点? Directory上的Dart API似乎非常有限。

人们通常会怎么说复制目录?只需致电系统cp?我的意思是我希望得到一个可以在多个平台上运行的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以递归地逐个文件地执行此操作。 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);

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