当前位置: 首页 > news >正文

做网站都有那些步骤网站建站平台eazyshop

做网站都有那些步骤,网站建站平台eazyshop,做交易网站存在什么风险,广州现在哪个区不能去一、实现方式 通过Qt自带的库来实现,使用多线程方式,通过信号和槽来触发压缩与解压缩,并将压缩和解压缩结果回传过来。 使用的类: #include "QtGui/private/qzipreader_p.h" #include "QtGui/private/qzipwriter…

一、实现方式

通过Qt自带的库来实现,使用多线程方式,通过信号和槽来触发压缩与解压缩,并将压缩和解压缩结果回传过来。
使用的类:

#include "QtGui/private/qzipreader_p.h"
#include "QtGui/private/qzipwriter_p.h"

二、环境准备

1、在.pro文件中添加模块gui-private

QT       += core gui gui-private

若未cmake工程,需要在CMakeList.txt中添加

includeinclude_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}))

三、实现示例

#include <QFileInfoList>
#include <QDir>
#include <QFileInfo>#define	FILE_MAX_SIZE 1024QFileInfoList ergodic_compression_file(QZipWriter *writer, const QString& rootPath, QString dirPath)
{QDir crrDir(dirPath);///解压失败的文件QFileInfoList errFileList;///添加文件QFileInfoList fileList = crrDir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);for (const QFileInfo& fileInfo : fileList){QString subFilePath = fileInfo.absoluteFilePath();QString zipWithinfilePath = subFilePath.mid(rootPath.size() + 1);QFile file(subFilePath);qint64 size = file.size() / 1024 / 1024;if (!file.open(QIODevice::ReadOnly) || size > FILE_MAX_SIZE){///打开文件失败,或者大于1GB导致无法解压的文件errFileList.append(fileInfo);continue;}writer->addFile(zipWithinfilePath, file.readAll());file.close();}///添加文件夹QFileInfoList folderList = crrDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);for (const QFileInfo& folderInfo : folderList){QString subDirPath = folderInfo.absoluteFilePath();QString zipWithinDirPath = subDirPath.mid(rootPath.size() + 1);writer->addDirectory(zipWithinDirPath);QFileInfoList child_file_list = ergodic_compression_file(writer, rootPath, subDirPath);errFileList.append(child_file_list);}return errFileList;
}bool compression_zip_file(const QString& selectFile2DirPath, const QString& savePath)
{if (selectFile2DirPath.isEmpty() || savePath.isEmpty()){return false;}if (!QFile::exists(selectFile2DirPath) || !QFileInfo(savePath).isDir()){return false;}if (QFileInfo(selectFile2DirPath).isFile())///压缩的是一个文件{QString fileName = QFileInfo(selectFile2DirPath).baseName();QString writerFilePath = savePath + "/" + fileName + ".zip";QFile selectFile(selectFile2DirPath);qint64 size = selectFile.size() / 1024 / 1024;if (!selectFile.open(QIODevice::ReadOnly) || size > FILE_MAX_SIZE){///打开文件失败,或者大于1GB导致无法压缩的文件return false;}QString addFileName = QFileInfo(selectFile2DirPath).fileName();QZipWriter writer(writerFilePath);writer.addFile(addFileName, selectFile.readAll());selectFile.close();return true;}else///压缩的是一个文件夹{QString zipRootFolder = selectFile2DirPath.mid(selectFile2DirPath.lastIndexOf("/") + 1);QString selectDirUpDir = selectFile2DirPath.left(selectFile2DirPath.lastIndexOf("/"));QString saveFilePath = savePath + "/" + zipRootFolder + ".zip";QZipWriter writer(saveFilePath);writer.addDirectory(zipRootFolder);QFileInfoList fileList = ergodic_compression_file(&writer, selectDirUpDir, selectFile2DirPath);writer.close();if (0 == fileList.size())return true;return false;}
}bool decompression_zip_file(const QString& selectZipFilePath, const QString& savePath)
{if (selectZipFilePath.isEmpty() || savePath.isEmpty()){return false;}if (!QFileInfo(selectZipFilePath).isFile() || !QFileInfo(savePath).isDir()){return false;}bool ret = true;QZipReader zipReader(selectZipFilePath);QVector<QZipReader::FileInfo> zipAllFiles = zipReader.fileInfoList();for (const QZipReader::FileInfo& zipFileInfo : zipAllFiles){const QString currDir2File = savePath + "/" + zipFileInfo.filePath;if (zipFileInfo.isSymLink){QString destination = QFile::decodeName(zipReader.fileData(zipFileInfo.filePath));if (destination.isEmpty()){ret = false;continue;}QFileInfo linkFi(currDir2File);if (!QFile::exists(linkFi.absolutePath()))QDir::root().mkpath(linkFi.absolutePath());if (!QFile::link(destination, currDir2File)){ret = false;continue;}}if (zipFileInfo.isDir){QDir(savePath).mkpath(currDir2File);}if (zipFileInfo.isFile){QByteArray dt = zipFileInfo.filePath.toUtf8();QString strtmp = QString::fromLocal8Bit(dt);QFile currFile(currDir2File);if (!currFile.isOpen()){currFile.open(QIODevice::WriteOnly);}else {ret = false;continue;}qint64 size = zipFileInfo.size / 1024 / 1024;if (size > FILE_MAX_SIZE){ret = false;continue;}QByteArray byteArr = zipReader.fileData(strtmp);currFile.write(byteArr);currFile.setPermissions(zipFileInfo.permissions);currFile.close();}}zipReader.close();return ret;
}

待完善:
1、中文路径,文件名含有中文
2、快捷文件,隐藏文件
3、隐藏文件夹,.dir和…dir,例如:.vs
4、单个超大文件的支持(1G以上)

如有错误或不足欢迎评论指出!创作不易,转载请注明出处。如有帮助,记得点赞关注哦(⊙o⊙)
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810

http://www.yayakq.cn/news/277074/

相关文章:

  • 凡科建站做网站需要几天小网站从哪找的
  • 广州番禺区网站建设学校网站建设可行性分析
  • 网站导航建设注意微信微网站开发百度云
  • 做网站的抬头怎么做网站建设实例pdf下载
  • 网站建设选谋者优惠券网站制作教程
  • 长沙做网站微联讯点不错网站开发与维护算什么职位
  • 网站分类目录大全网站备案信息的核查方式
  • 怎么做网站文章优化seo是什么的简称
  • 淘宝里面的网站怎么做的wordpress怎么做301
  • html5手机网站the7 wordpress哪个好
  • 鹿泉企业网站建设软件实施工程师工资一般多少
  • 笔趣阁建站教程东莞网页设计培训学校
  • 网站推广的策略有哪些有经验的中山网站建设
  • 3 如何进行网站优化设计一个人可以做网站吗
  • 郑州网站建设公司怎么选网站的专业
  • 网站建设公司的商业模式古镇网站建设公司
  • 山东省建设工会网站app开发公司有什么部门
  • 网站建设目的内容输出建立网站费用表
  • 潍坊专业建站如何用ftp做网站
  • 3合一网站网页设计的网网页设计的网站
  • 专业制作网站服务公司微信公众平台开发模式
  • 网站直播怎么做网络设计与制作
  • 网站公司建设网站网站结构优化包括什么
  • 做电影字幕的网站nginx代理wordpress
  • 机关单位网站安全建设建设一个自己的网站
  • 苏州网站制作电话海外推广有哪些渠道
  • 国外建站工具安装了wordpress程序
  • 金华网站建设建设设计网站研究院网站建设方案
  • 抚顺市 网站建设做网站公司属于什么行业
  • wordpress 建站 搜索黑科技引流工具