qt5.6.3 zipreader zipwriter

直接上代码

#if _MSC_VER >=1600 // VS2010版本号是1600
#pragma execution_character_set("utf-8")
#endif
#include "QtWidgetsApplication7.h"
#include <QtWidgets/QApplication>
#include <QFileInfoList>
#include <QDir>
#include "5.6.3/QtGui/private/qzipreader_p.h"
#include "5.6.3/QtGui/private/qzipwriter_p.h"
#include "qdebug.h"
//bool QZipReader::extractAll(const QString& destinationDir) const
//{
//	QDir baseDir(destinationDir);
//
//	if (!baseDir.exists()) {
//		baseDir.mkpath(destinationDir);
//	}
//
//	const QVector<FileInfo> allFiles = fileInfoList();
//
//	for (FileInfo fi : allFiles) {
//		const QString absPath = QDir::toNativeSeparators(QString("%1/%2").arg(destinationDir, fi.filePath));
//		baseDir.mkpath(QFileInfo(absPath).absoluteDir().path());
//
//		if (fi.isFile) {
//			QFile f(absPath);
//
//			if (!f.isOpen()) {
//				f.open(QIODevice::WriteOnly);
//			}
//
//			f.write(fileData(fi.filePath));
//			f.setPermissions(fi.permissions);
//			f.close();
//		}
//	}
//
//	return true;
//}

bool deCompressZip(const QString& zipPath, const QString& zipDir)
{
	QDir tempDir;
	if (!tempDir.exists(zipDir)) tempDir.mkpath(zipDir);
	QZipReader reader(zipPath);

	QDir baseDir(zipDir);

	if (!baseDir.exists()) {
		baseDir.mkpath(zipDir);
	}

	const QVector<QZipReader::FileInfo> allFiles = reader.fileInfoList();

	for (QZipReader::FileInfo fi : allFiles) {
		const QString absPath = QDir::toNativeSeparators(QString("%1/%2").arg(zipDir, fi.filePath));
		baseDir.mkpath(QFileInfo(absPath).absoluteDir().path());
		if (fi.filePath == "设计规则/L型挡墙.rwx")
		{
			qDebug() << "1" ;
		}
		if (fi.isFile) {
			QFile f(absPath);

			if (!f.isOpen()) {
				f.open(QIODevice::WriteOnly);
			}
			QByteArray dt = fi.filePath.toUtf8();
			QString strtemp = QString::fromLocal8Bit(dt);

			QByteArray tmp = reader.fileData(strtemp);
			f.write(tmp);
			f.setPermissions(fi.permissions);
			f.close();
		}
		else
		{
			QDir dir(absPath);
			if (!dir.exists())
			{
				dir.mkpath(absPath);
			}
		}
	}

	return true;
}

bool TraverseAndAdd(QZipWriter* pZWrite, const QString& curDir, const QString& relativeDir)
{
	QDir dir(curDir);
	QFileInfoList fInfoList = dir.entryInfoList(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);
	for (const QFileInfo& eachFile : fInfoList)
	{
		QString pathInZip = eachFile.fileName();
		QString absPath;
		if (eachFile.isFile())
			absPath = eachFile.absoluteFilePath();

		if (false == relativeDir.isEmpty())
			pathInZip = relativeDir + QDir::separator() + eachFile.fileName();

		if (eachFile.isDir())
		{
			TraverseAndAdd(pZWrite, eachFile.absoluteFilePath(), pathInZip);
		}
		else
		{
			QFile fRead(absPath);
			if (!fRead.open(QIODevice::ReadOnly))
				continue;

			pZWrite->addFile(pathInZip, fRead.readAll());
			fRead.close();
		}
	}
	return true;
}

bool CompressFolder(const QString& srcFolder, const QString& zipFilePath)
{
	QZipWriter writer(zipFilePath);
	bool ret = TraverseAndAdd(&writer, srcFolder, "");
	writer.close();
	return ret;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtWidgetsApplication7 w;
    w.show();
	QString strZipPath("C:\\Users\\zhangy-eu\\Documents\\GroadWork\\examples\\test.zip");
	deCompressZip(strZipPath, QString::fromStdWString(L"C:\\Users\\zhangy-eu\\Documents\\GroadWork\\examples\\01-示例1222"));
	//CompressFolder(QString::fromStdWString(L"C:\\Users\\zhangy-eu\\Documents\\GroadWork\\examples\\01-示例1\\"), strZipPath);

    return a.exec();
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值