唐山高端网站建设,建设部政务网站,好建网站,组建一个公司网络方案前言
很简单的一个 zip 包解压缩的功能#xff0c;但是 windows 平台中文显示乱码#xff0c;很糟心#xff0c;搜了一圈没找到现成的方法#xff0c;在此贴上我的解决方式。
实现
导入需要的包
flutter pub add archiveflutter pub add fast_gbkflutter pub add path代…前言
很简单的一个 zip 包解压缩的功能但是 windows 平台中文显示乱码很糟心搜了一圈没找到现成的方法在此贴上我的解决方式。
实现
导入需要的包
flutter pub add archiveflutter pub add fast_gbkflutter pub add path代码如下
import dart:io;
import package:fast_gbk/fast_gbk.dart;
import package:archive/archive.dart;
import package:path/path.dart as p;void main() {unzip(G:/testUpdate/111.zip, G:/testUpdate/1);
}void unzip(String inputPath, String outputPath) {var archive zipDecode(inputPath);for (final file in archive) {final filename file.name;final filePath p.join(outputPath, filename);if (!file.isFile !file.isSymbolicLink) {Directory(filePath).createSync(recursive: true);continue;}if (file.isSymbolicLink) {final link Link(filePath);link.createSync(p.normalize(file.nameOfLinkedFile), recursive: true);} else {final data file.content as Listint;final newFile File(filePath);newFile.createSync(recursive: true);newFile.writeAsBytesSync(data);}}
}// 由于 archive 包直接用会乱码这里加一下对于 gbk 编码的处理
Archive zipDecode(String inputPath) {final zipFile File(inputPath);final bytes zipFile.readAsBytesSync();final inputStream InputStream(bytes);// final inputStream InputFileStream(G:/testUpdate/111.zip);var directory ZipDirectory.read(inputStream);final archive Archive();for (final zfh in directory.fileHeaders) {final zf zfh.file!;// The attributes are stored in base 8final mode zfh.externalFileAttributes!;final compress zf.compressionMethod ! ZipFile.STORE;//dynamic content zf.rawContent;var file ArchiveFile(zf.filename, zf.uncompressedSize!, zf, zf.compressionMethod);file.mode mode 16;// see https://github.com/brendan-duncan/archive/issues/21// UNIX systems has a creator version of 3 decimal at 1 byte offsetif (zfh.versionMadeBy 8 3) {file.isFile false;final fileType file.mode 0xF000;switch (fileType) {case 0x8000:case 0x0000: // No determination can be made so we assume its a file.file.isFile true;break;case 0xA000:file.isSymbolicLink true;break;default:}} else {file.isFile !file.name.endsWith(/);}file.crc32 zf.crc32;file.compress compress;file.lastModTime zf.lastModFileDate 16 | zf.lastModFileTime;final needGbkDecode zf.flags 2048 0;if (needGbkDecode) {file.name gbk.decode(zf.filename.codeUnits);}archive.addFile(file);}return archive;
}昨天刚接触的 flutter若是代码有问题还望指出非常感谢