qt5.6.3 zipreader zipwriter

本文介绍了如何使用Qt库中的QZipReader和QZipWriter类在C++中实现文件的解压缩和压缩功能,包括处理文件列表、创建目录结构以及文件数据的读写操作。
摘要由CSDN通过智能技术生成

直接上代码

#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: Qt 5.6.3是一种跨平台的应用程序开发框架,可在Windows操作系统上使用。它提供了丰富的工具和库,以帮助开发者快速创建高质量的应用程序。 Qt 5.6.3具有许多令人激动的功能和改进,使得在Windows上开发应用程序更加轻松和高效。 首先,Qt 5.6.3引入了对Windows 10的全面支持。这意味着开发者可以使用Qt来创建符合Windows 10设计准则的应用程序,并充分利用Windows 10的新功能和特性。 其次,Qt 5.6.3提供了用于Windows开发的工具和库。这些工具包括Qt Creator集成开发环境,该环境具有强大的代码编辑和调试功能,可以帮助开发者更快地创建和调试应用程序。此外,Qt还提供了一系列用于开发图形界面和多媒体应用程序的库,如Qt GUI和Qt Multimedia等。 此外,Qt 5.6.3还提供了与Windows操作系统的紧密集成。开发者可以轻松地使用Qt来访问Windows的原生API,并与其他Windows应用程序进行交互。这使得开发者可以创建更加功能强大和灵活的应用程序。 总之,Qt 5.6.3是一种非常强大的开发框架,可以帮助开发者在Windows操作系统上创建出色的应用程序。无论是开发图形界面应用程序还是多媒体应用程序,Qt都具备丰富的功能和工具来满足开发需求。无论是初学者还是经验丰富的开发者,都可以从Qt 5.6.3中受益,并将它用于Windows应用程序开发中。 ### 回答2: Qt是一种跨平台的应用程序开发框架,而Qt 5.6.3Qt框架的一个版本。它是在Windows操作系统上运行的。 Qt 5.6.3是在2016年发布的一个重要的Qt版本。它引入了许多新功能和改进,包括性能优化、新的Qt Quick控件和Qt WebView模块。这个版本也修复了一些已知的问题,提高了整体的稳定性和可靠性。 在Windows平台上使用Qt 5.6.3进行开发可以获得丰富的功能和工具。Qt提供了许多用于图形用户界面(GUI)开发的模块,包括Qt Widgets和Qt Quick。Qt Widgets提供了一套丰富的可视化控件和布局管理器,可以用于创建传统的桌面应用程序。而Qt Quick是基于QML(Qt Meta-Object Language)的一种声明式语言,可以用于创建现代化的动态用户界面。 除了GUI开发Qt 5.6.3还提供了许多其他功能模块,如数据库访问、网络编程、多媒体处理和多线程支持等。Qt还支持跨平台的开发开发者可以使用相同的代码库在不同的操作系统上进行开发。 对于Windows开发者来说,Qt 5.6.3提供了一个强大的开发工具链。Qt Creator是Qt官方提供的集成开发环境(IDE),它提供了代码编辑器、调试器、可视化设计工具和自动化构建系统等。开发者可以使用Qt Creator轻松地创建、调试和部署他们的应用程序。 总之,Qt 5.6.3是一个功能强大、稳定可靠的版本,适用于Windows平台的应用程序开发。无论是开发桌面应用还是移动应用,Qt都可以提供丰富的功能和工具,帮助开发者快速、高效地开发应用程序。 ### 回答3: Qt 5.6.3是一个跨平台的C++应用程序开发框架,适用于Windows操作系统。它提供了丰富的功能和工具,用于开发用户友好、可扩展和高效的应用程序。 Qt 5.6.3提供了广泛的功能库和模块,包括图形界面、网络、数据库、多媒体、XML处理、并发编程等,使开发者能够轻松地构建各种类型的应用程序。 在Windows操作系统上使用Qt 5.6.3进行开发时,开发者可以利用Qt的集成开发环境Qt Creator来创建和管理项目。Qt Creator提供了一个直观的界面和强大的功能,使开发者能够方便地编写代码、调试程序和构建应用程序。 Qt 5.6.3还支持Windows操作系统的各种特性和功能,如窗口管理、消息处理、文件系统访问、多线程编程等。开发者可以利用Qt的API和工具来实现这些功能,并为用户提供一个完整的Windows体验。 总之,Qt 5.6.3是一个功能强大、易于使用和有效的应用程序开发框架,在Windows操作系统上开发应用程序时具有广泛的应用前景。无论是开发桌面应用程序、嵌入式设备、移动应用程序还是云服务,Qt 5.6.3都能提供灵活的解决方案和卓越的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值