unzipWithPassword static method

Future<List<String>> unzipWithPassword(
  1. String zipPath,
  2. String targetPath,
  3. String password
)

解压加密zip文件到目标路径

zipPath zip文件路径 targetPath 解压目标路径 password 解压密码

示例:

List<String> files = await ZipUtil.unzipWithPassword('a.enc.zip', './output', '123456');

返回结果: List<String> 返回解压出的全部文件路径列表

若解压密码错误,异常信息包含“密码错误”

Implementation

static Future<List<String>> unzipWithPassword(
  String zipPath,
  String targetPath,
  String password,
) async {
  try {
    final bytes = await File(zipPath).readAsBytes();
    final archive = ZipDecoder().decodeBytes(bytes, password: password);
    final extractedFiles = <String>[];

    for (final file in archive) {
      final filename = file.name;
      if (file.isFile) {
        final data = file.content as List<int>;
        final filePath = '$targetPath${Platform.pathSeparator}$filename';
        final outFile = File(filePath);
        await outFile.parent.create(recursive: true);
        await outFile.writeAsBytes(data);
        extractedFiles.add(filePath);
      }
    }

    return extractedFiles;
  } catch (e) {
    if (e.toString().contains('Invalid password')) {
      throw Exception('密码错误');
    }
    throw Exception('解压错误: $e');
  }
}