quazip

1)编程过程中遇到的问题。

You don't need QTextStream or QDataStream to write a QDomDocument to a ZIP file.

You can simply do the following:

QDomDocument doc;
/* doc is filled with some XML-data */

zipfile = new QuaZip("test.zip");
zipfile->open(QuaZip::mdCreate);
QuaZipFile file(zipfile);
file.open(QIODevice::WriteOnly, QuaZipNewInfo("foo.xml"));

// After .toString(), you should specify a text codec to use to encode the
// string data into the (binary) file. Here, I use UTF-8:
file.write(doc.toString().toUtf8());

file.close();
zipfile->close();

        

QT的提供了qCompress/qUncompress方法来提供文件的压缩与解压,但是它存在的一个问题是:它只是单纯地将一个文件压缩为某种格式的压缩文件,但是压缩后的文件无法通过其它解压工具打开,例如:7zip,或winRar,只能通过qUncompress将它解压读取出来,也就是说qCompress生成的压缩文件不包含普通压缩文件的一些头信息,导致无法解压。

        QuaZip是使用QT、C++对zlib进行简单封装的用于压缩zip以及解压缩zip的开源库。适用于多种平台。利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它工具打开,满足我们的需求。

QuaZip编译:

        注意:QuaZip是基于ZLIB库的,因此编译之前必须编译完ZLIB或者导入ZLIB的头文件。这里编译的过程中采用后者,因为很简单,编译完成后我们使用它的 dll、lib以及.h头文件。

        QuaZip源码包下载地址:http://sourceforge.net/projects/quazip/ 

 

一。简介

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

二。编译

          QuaZIP目前支持以下几个平台:
  • linux-g++ (Ubuntu 11.10, Qt 4.7.4)
  • freebsd-g++ (Qt 4.0.0
  • hpux-acc (HP-UX 11.11)
  • hpux-g++ (HP-UX 11.11)
  • win32-g++ (MinGW)
  • win32-msvc2010 (MS VS 2010 Express, Qt 4.8.4)
  • win32-msvc2010 (Qt Creator, Qt 5.0.1)
  • some Symbian version, reportedly
      QuaZIP是基于ZLIB库的,所以编译之前必须编译完ZLIB或者导入ZLIB的LIB和头文件。

      默认QuaZIP是编译为DLL或者SO文件的。如果你想直接使用源代码的话你可以把所有导出类的标识符QUAZIP_EXPORT注释了,就可以编译通过
而不会生成DLL或者SO文件。
        下面你就可以按照你所使用的平台和方式编译QuaZIP。

三。使用

QuaZIP共有以下几个类
JlCompress 典型操作工具类
QuaAdler32 Adler32 算法校验和
QuaChecksum32 校验和接口
QuaCrc32 CRC32 校验和
QuaGzipFile GZIP 文件操作
QuaZIODevice  压缩/解压 QIODevice
QuaZip ZIP 文件
QuaZipDir ZIP文件内目录导航
QuaZipFile ZIP文件内的文件
QuaZipFileInfo ZIP压缩包内的文件信息
QuaZipFilePrivate QuaZip的接口
QuaZipNewInfo 被创建的文件信息
QuaZipPrivate QuaZIP内部类

下面给出一个自己用的解压缩 ZIP的例子
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 );
		<a target=_blank name="baidusnap1" style="color: rgb(202, 0, 0); "></a><span style="background-color: rgb(160, 255, 255); ">QByteArray</span> 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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值