我正在尝试使用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
?我的意思是我希望得到一个可以在多个平台上运行的解决方案。
答案 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);
然后你一个接一个地处理一个文件。