extractZipArchiveSync function

void extractZipArchiveSync(
  1. File archive,
  2. Directory dir, {
  3. void callback(
    1. ZipEntry entry,
    2. int totalEntries
    )?,
})

Extracts a Zip archive into the specified directory.

if the optional callback is specified, it will be called for every extracted file after the extraction has been completed.

Implementation

void extractZipArchiveSync(File archive, Directory dir, {void Function(ZipEntry entry, int totalEntries)? callback}) {
  if (callback == null) {
    final archivePath = archive.path.toNativeUtf8();
    final dirPath = dir.path.toNativeUtf8();
    try {
      zipExtract(archivePath, dirPath, nullptr, nullptr);
    } finally {
      malloc.free(archivePath);
      malloc.free(dirPath);
    }
    return;
  }

  final reader = ZipFileReaderSync();
  reader.open(archive);
  final entries = reader.entries();
  for (final entry in entries) {
    if (entry.isDir) {
      Directory(path.join(dir.path, entry.name)).createSync(recursive: true);
    } else {
      final filePath = path.join(dir.path, entry.name);
      final fileDir = Directory(path.dirname(filePath));
      fileDir.createSync(recursive: true);
      reader.readToFile(entry.name, File(filePath));
    }
    callback.call(entry, entries.length);
  }
  reader.close();
}