Skip to content

庄朋龙的博客

有志者自有千方万计,无志者只感千难万难。

Menu
  • 首页
  • 生活
  • 创业
  • 编程
  • 运维
  • 视频课程
    • 跨境独立站
    • Shopee跨境电商
    • TEMU跨境电商
  • 资源分享
    • 网站推荐
    • 开源推荐
    • 可商用字体
    • 书籍分享
Menu

使用QuaZip解压文件

Posted on 2015年11月2日2025年3月4日 by 庄朋龙

QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库。如果你的Qt项目当中用到了压缩以及解压缩ZIP的话你可以考虑选择使用它。

地址:官方主页

QuaZIP是基于ZLIB库的,所以编译之前必须编译完ZLIB或者导入ZLIB的LIB和头文件。

默认QuaZIP是编译为DLL或者SO文件的。如果你想直接使用源代码的话你可以把所有导出类的标识符QUAZIP_EXPORT注释了,就可以编译通过

而不会生成DLL或者SO文件。

下面你就可以按照你所使用的平台和方式编译QuaZIP。

bool Ziper::Extract(const QString& in_file_path, const QString& out_file_path)
{
	QuaZip archive(in_file_path);
	if (!archive.open(QuaZip::mdUnzip))
		return false;
	
	QString path = out_file_path;
	if (!path.endsWith("/") && !out_file_path.endsWith("\\"))
		path += "/";

	QDir dir(out_file_path);
	if (!dir.exists())
		dir.mkpath(out_file_path);

	for( bool f = archive.goToFirstFile(); f; f = archive.goToNextFile() )
	{
		QString filePath = archive.getCurrentFileName();
		QuaZipFile zFile(archive.getZipName(), filePath);
		zFile.open(QIODevice::ReadOnly );
		QByteArray ba = zFile.readAll();
		zFile.close();

		if (filePath.endsWith("/"))
		{
			dir.mkpath(filePath);
		}
		else
		{
			QFile dstFile(path + filePath);
			if (!dstFile.open(QIODevice::WriteOnly))
				return false;
			dstFile.write(ba);
			dstFile.close();
		}
	}

	return true;
}

其他问题可以去官方网站看看,他们给出了很多测试用例

Category: 编程, 资源分享

全栈开发者×创业偏执狂

相信代码能改变命运,也相信凌晨四点的服务器警报里有真实的人生。

我的创业项目:
SHOPAGG / SmallShop / DigitShops / 文硕阁

© 2025 庄朋龙的博客