zipDirectory static method

Future<void> zipDirectory(
  1. String sourceDirPath,
  2. String zipFilePath
)

Implementation

static Future<void> zipDirectory(
  String sourceDirPath,
  String zipFilePath,
) async {
  final sourceDir = Directory(sourceDirPath);
  if (!await sourceDir.exists()) {
    throw Exception('Source directory does not exist: $sourceDirPath');
  }

  final encoder = ZipEncoder();
  final archive = Archive();

  await for (var entity in sourceDir.list(
    recursive: true,
    followLinks: false,
  )) {
    if (entity is File) {
      final relativePath = archivePath(sourceDirPath, entity.path);
      final data = await entity.readAsBytes();
      archive.addFile(ArchiveFile(relativePath, data.length, data));
    }
  }

  final zipData = encoder.encode(archive);
  final zipFile = File(zipFilePath);
  await zipFile.parent.create(recursive: true);
  await zipFile.writeAsBytes(zipData);
}