extractZipArchiveSync function
void
extractZipArchiveSync(})
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();
}