【狂言QT之二】QuaZip实现多文件打包 - 编程当前位置:& &&&【狂言QT之二】QuaZip实现多文件打包【狂言QT之二】QuaZip实现多文件打包&&网友分享于:&&浏览:30次【大话QT之二】QuaZip实现多文件打包项目需求:
&&&&&&& 在Goldenfarm客户端中当用户选择了本地场景文件,并进行本地场景文件分析后会产生分析结果,分析结果主要包括:贴图纹理、可渲染层等,其中贴图纹理指出了在场景文件中使用到的贴图或其它文件。在作业实际提交之前,需要将文件打包,然后上传到FTP,其中贴图纹理文件的打包采用QT的第三方控件QuaZip来实现。
&&&&&&& 本地场景分析之后产生的结果如下图所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
方法调研:
&&&&&&& 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/
&&&&&&& 利用VS2010打开QT项目,然后编译,由于没有zlib.***件,它会报出如下错误:fatal error C1083: Cannot open include file: 'zlib.h': No such file or directory
&&&&&&& 解决方法,将zlib.h放入该项目中,我的QT版本是:4.8.3,在它src的第三方库中已经包含了zlib库,zlib库在QT中的目录为:D:\QT\4.8.4\src\3rdparty\zlib
&&&&&&& 从该目录下拷贝zlib.h到QuaZip项目中,重新编译又会报出如下的错误:fatal error C1083: Cannot open include file: 'zconf.h': No such file or directory
&&&&&&& 解决方法一样,在D:\QT\4.8.4\src\3rdparty\zlib中将zconf.***件拷贝到QuaZip目录下,重新编译,成功。
&&&&&&& 在项目中:我们需要用的就是它编译产生的dll、lib以及QuaZip中用到的.h头文件。
代码实现:
&&&&&&& 这里列出我写的测试代码,这里只是一个示例,没有创建目录结构,如果创建目录结构请参考:/questions//how-can-i-zip-a-directory-folder-with-quazip&&&&&&&
wrapper.append(QString(&C:\\Users\\Administrator\\Desktop\\fdafsa.jpg&));
wrapper.append(QString(&C:\\Users\\Administrator\\Desktop\\downloadtest\\sy_car.max&));
QString zipLocation = &C:\\Users\\Administrator\\Desktop\\test.zip&;
QuaZip zip(zipLocation);
zip.setFileNameCodec(&IBM866&);
if(!zip.open(QuaZip::mdCreate)){
qDebug() && &error .... 1&;
QuaZipFile outFile(&zip);
for(int i = 0 ; i & wrapper.size() ; i++){
QFileInfo file(wrapper.at(i));
if(file.exists()){
QFile inFileT
inFileTemp.setFileName(file.fileName());
inFile.setFileName(file.filePath());
if(!inFile.open(QIODevice::ReadOnly)){
qDebug() && &error ....2&;
qDebug() && inFile.errorString().toLocal8Bit().constData();
if(!outFile.open(QIODevice::WriteOnly , QuaZipNewInfo(inFileTemp.fileName() , inFile.fileName()))){
qDebug() && &error ...3&;
outFile.write(inFile.readAll());
if(outFile.getZipError() != UNZ_OK){
qDebug() && &error ...4&;
outFile.close();
if(outFile.getZipError() != UNZ_OK){
qDebug() && &error ....5&;
inFile.close();
zip.close();
if(zip.getZipError()){
qDebug() && &error ...6&;
}程序运行结果:在桌面生成test.zip压缩文件,且利用解压工具可以正常解压,里面包含两个文件,且均可以正常打开,一切正常。
&&&&&&& 明天就是要过清明节了,要和女朋友去南京,这还是来苏州后第一次出去玩。想想这周的工作,还有很多需要整理的工作,等节后再继续吧,女朋友为了去南京准备了好多,又是买车票,又是查路线,好感动滴说,哎,有个IT的男友真是不幸。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有装了一遍Qt,个人总结的Qt***教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
装了一遍Qt,个人总结的Qt***教程
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩19页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢QT软件打包发布_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
QT软件打包发布
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢