extractArchive method
Extract archive to a directory
Implementation
Future<Directory> extractArchive(File archiveFile,
{String? targetDirName}) async {
if (!archiveFile.existsSync()) {
throw WalletException('Archive file does not exist: ${archiveFile.path}');
}
final targetName =
targetDirName ?? path.basenameWithoutExtension(archiveFile.path);
final extractDir = await createTempDirectory('extract_$targetName');
try {
final bytes = await archiveFile.readAsBytes();
final archive = ZipDecoder().decodeBytes(bytes);
for (final file in archive) {
final filename = path.join(extractDir.path, file.name);
if (file.isFile) {
final outputFile = File(filename);
await outputFile.create(recursive: true);
await outputFile.writeAsBytes(file.content as List<int>);
} else {
await Directory(filename).create(recursive: true);
}
}
return extractDir;
} catch (e) {
await extractDir.delete(recursive: true);
throw WalletException('Failed to extract archive: $e');
}
}