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

规范门户网站建设宿松县住房和城乡建设局网站

规范门户网站建设,宿松县住房和城乡建设局网站,科技感网页模板,WordPress写文章一直转修改qt5 7zip源码编译及使用(含展示进度)一文中的封装类ZlibHelper代码类,继承多线程,使解压,压缩时进度条不影响界面,同时添加压缩文件中的文件预览功能,建议直接看源码 导读 相关代码内容扩展预览内容时获取文件修改…

修改qt5 7zip源码编译及使用(含展示进度)一文中的封装类ZlibHelper代码类,继承多线程,使解压,压缩时进度条不影响界面,同时添加压缩文件中的文件预览功能,建议直接看源码

导读

    • 相关代码
    • 内容扩展
      • 预览内容时获取文件修改时间
      • 预览内容时获取文件大小

相关代码

lib_bit7z.h 头文件代码

#ifndef LIB_BIT7Z_H
#define LIB_BIT7Z_H
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
#include "singleton.h"
#include <QDebug>
#include <QObject>
#include <QString>
#include <QFileInfo>
#include <QFile>
#include <QDir>
#include <QThread>
#include <iostream>
#include <string>
#include <functional>
#include <QMetaType>
#include "include/bit7z.hpp"
#include "include/bit7zlibrary.hpp"
using namespace bit7z;
using namespace std;enum Oper_Type{///解压Oper_Extract=-1,///压缩Oper_Compress=1
};class Lib_bit7z: public QThread
{Q_OBJECT
public:Lib_bit7z(Oper_Type _type);///初始化业务值void inits(QString _Zip,QString _Dir,QString _passWord){sZip=_Zip;sDir=_Dir;passWord=_passWord;}///lib所在路径wstring lib_path;void run() override;static wstring stringToWstring_WindowApi(const string &str);static string wstringToString_WindowsApi(const wstring &wstr);//预览static void Get_view(QString path);static vector<BitArchiveItem> Get_view_item(QString path,QString password);
signals:void sigProgress(uint64_t nValue, uint64_t nTotalSize);void sigProgressFile(QString sFile);void IsStart(bool isStart);void MessAgeError(QString);
private:/// 解压void extract(const QString& sZip, const QString& sDir);/// 压缩void compress(const QString& sDir, const QString& sZip);void callbackProcess(uint64_t size);void callbackFile(wstring filename);void callbackTotal(uint64_t size);private:uint64_t m_nTotalSize; // 压缩前文件夹原始大小///操作类型Oper_Type operation_type;QString sZip;QString sDir;QString passWord;
};#endif // LIB_BIT7Z_H

lib_bit7z.cpp头文件代码

#include "lib_bit7z.h"
#include <QMessageBox>
Lib_bit7z::Lib_bit7z(Oper_Type _type):operation_type(_type)
{lib_path=L"7z.dll";qRegisterMetaType<uint64_t>("uint64_t");}
//Lib_bit7z::~Lib_bit7z(){}void Lib_bit7z::run()
{emit IsStart(true);if(operation_type==Oper_Extract)extract(sZip,  sDir);elsecompress(sDir, sZip);emit IsStart(false);
}void Lib_bit7z::Get_view(QString sZip)
{wstring wZip = stringToWstring_WindowApi(sZip.toLocal8Bit().toStdString());try {Bit7zLibrary lib{ L"7z.dll" };BitArchiveInfo arc{ lib, wZip, BitFormat::Auto };//printing archive metadatawcout << L"Archive properties" << endl;wcout << L" Items count: "   << arc.itemsCount() << endl;wcout << L" Folders count: " << arc.foldersCount() << endl;wcout << L" Files count: "   << arc.filesCount() << endl;wcout << L" Size: "          << arc.size() << endl;wcout << L" Packed size: "   << arc.packSize() << endl;wcout << endl;//printing archive items metadatawcout << L"Archive items";auto arc_items = arc.items();for ( auto& item : arc_items ) {wcout << endl;wcout << L" Item index: "   << item.index() << endl;wcout << L"  Name: "        << item.name() << endl;wcout << L"  Extension: "   << item.extension() << endl;wcout << L"  Path: "        << item.path() << endl;wcout << L"  IsDir: "       << item.isDir() << endl;wcout << L"  Size: "        << item.size() << endl;wcout << L"  Packed size: " << item.packSize() << endl;}} catch ( const BitException& ex ) {//do something with ex.what()...QMessageBox::warning(nullptr,"提示","预览失败! 原因: \n"+QString::fromStdString(ex.what()));}}vector<BitArchiveItem> Lib_bit7z::Get_view_item(QString sZip,QString password)
{wstring wZip = stringToWstring_WindowApi(sZip.toLocal8Bit().toStdString());vector<BitArchiveItem> items;try {Bit7zLibrary lib{ L"7z.dll" };BitArchiveInfo arc{ lib, wZip, BitFormat::Auto };if(password.trimmed()!=""){wstring wPassword = stringToWstring_WindowApi(password.toLocal8Bit().toStdString());arc.setPassword(wPassword);}items = arc.items();} catch ( const BitException& ex ) {//do something with ex.what()...QMessageBox::warning(nullptr,"提示","提取预览文件失败! 原因: \n"+QString::fromStdString(ex.what()));}return items;
}//----------------------------------------------------------------------------
void Lib_bit7z::callbackProcess(uint64_t size)
{double process = ((1.0 * size) / m_nTotalSize)*100;
//    qDebug()<<QString("process -- %1  -->%2").arg(size).arg(QString::number(process,'f',2));if (m_nTotalSize == 0){return;}emit sigProgress(size, m_nTotalSize);
}//----------------------------------------------------------------------------
void Lib_bit7z::callbackFile(wstring filename)
{string temp = wstringToString_WindowsApi(filename.c_str());QString sContent = QString::fromLocal8Bit(temp.c_str());
//    qDebug()<<QString("file --- %1").arg(sContent);emit sigProgressFile(sContent);
}void Lib_bit7z::callbackTotal(uint64_t size)
{m_nTotalSize = size;qDebug()<<QString("total -- %1").arg(size);
}wstring Lib_bit7z::stringToWstring_WindowApi(const string &str)
{int nLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), nullptr, 0);wchar_t* buffer = new wchar_t[nLen + 1];MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, nLen);buffer[nLen] = '\0';                    //字符串断尾wstring wstr = buffer;                                                 //赋值delete[] buffer;                       //删除缓冲区return wstr;//    return L"";
}string Lib_bit7z::wstringToString_WindowsApi(const wstring &wstr)
{int nLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), nullptr, 0, nullptr, nullptr);char* buffer = new char[nLen + 1];WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, nLen, nullptr, nullptr);buffer[nLen] = '\0';               //字符串断尾string str = buffer;                                             //赋值delete[] buffer;                  //删除缓冲区return str;//    return "";
}//----------------------------------------------------------------------------
// 解压
void Lib_bit7z::extract(const QString &sZip, const QString &sDir)
{m_nTotalSize = 0;wstring wZip = stringToWstring_WindowApi(sZip.toLocal8Bit().toStdString());wstring wDir = stringToWstring_WindowApi(sDir.toLocal8Bit().toStdString());try{qDebug()<<QString::fromStdWString(lib_path);qDebug()<<QFileInfo::exists(QString::fromStdWString(lib_path));qDebug()<<"[wZip] : "<<QString::fromStdWString(wZip);qDebug()<<"[wDir] : "<<QString::fromStdWString(wDir);Bit7zLibrary lib(lib_path);BitExtractor extractor(lib,  BitFormat::Auto);ProgressCallback pc = std::bind(&Lib_bit7z::callbackProcess, this, std::placeholders::_1);TotalCallback tc = std::bind(&Lib_bit7z::callbackTotal, this, std::placeholders::_1);FileCallback fc = std::bind(&Lib_bit7z::callbackFile, this, std::placeholders::_1);if(passWord.trimmed()!=""){wstring wPassWord=stringToWstring_WindowApi(passWord.toLocal8Bit().toStdString());extractor.setPassword(wPassWord);}extractor.setProgressCallback(pc);extractor.setTotalCallback(tc);extractor.setFileCallback(fc);extractor.extract(wZip, wDir);}catch (const BitException& ex){qDebug()<<"extract ---> "<<ex.what();emit MessAgeError(QString::fromStdString(ex.what()));return;}
}void Lib_bit7z::compress(const QString &sDir, const QString &sZip)
{m_nTotalSize = 0;wstring wDir = stringToWstring_WindowApi(sDir.toLocal8Bit().toStdString());wstring wZip = stringToWstring_WindowApi(sZip.toLocal8Bit().toStdString());try{Bit7zLibrary lib(lib_path);BitCompressor compressor(lib, BitFormat::SevenZip);ProgressCallback pc = std::bind(&Lib_bit7z::callbackProcess, this, std::placeholders::_1);TotalCallback tc = std::bind(&Lib_bit7z::callbackTotal, this, std::placeholders::_1);FileCallback fc = std::bind(&Lib_bit7z::callbackFile, this, std::placeholders::_1);if(passWord.trimmed()!=""){wstring wPassWord=stringToWstring_WindowApi(passWord.toLocal8Bit().toStdString());compressor.setPassword(wPassWord);}compressor.setProgressCallback(pc);compressor.setTotalCallback(tc);compressor.setFileCallback(fc);QFile::remove(sZip);compressor.compressDirectory(wDir, wZip); //compressing a directory}catch (const BitException& ex){qDebug()<<"extract ---> "<<ex.what();emit MessAgeError(QString::fromStdString(ex.what()));}
}

内容扩展

预览内容时获取文件修改时间

宏定义

//FILETIME 时间有效性判断
#define ISTIME(time) ((time.dwLowDateTime==0&& time.dwHighDateTime==0)?FALSE:TRUE)
#define FILETIME_ISVALID(lastcreate,lastwrite,lastaccess) (ISTIME(lastaccess)?lastaccess:(ISTIME(lastwrite)?lastwrite:lastcreate))

调用:

	//items[i] 为BitArchiveItem类型FILETIME TIME=FILETIME_ISVALID((items[i].getProperty(BitProperty::CTime).isFiletime()?items[i].getProperty(BitProperty::CTime).getFiletime():FILETIME()),(items[i].getProperty(BitProperty::ATime).isFiletime()?items[i].getProperty(BitProperty::ATime).getFiletime():FILETIME()),(items[i].getProperty(BitProperty::MTime).isFiletime()?items[i].getProperty(BitProperty::MTime).getFiletime():FILETIME()));

预览内容时获取文件大小

宏定义

#define KB                   (1024.0)
#define MB                (1048576.0)
#define GB             (1073741824.0)
#define TB          (1099511627776.0)

调用:

 ///获取文件大小static QString Getsize(LONGLONG _size){if(_size>TB)return QString("%1 TB").arg(QString::number(_size/TB,'f',2));if(_size>GB)return QString("%1 GB").arg(QString::number(_size/GB,'f',2));if(_size>MB)return QString("%1 MB").arg(QString::number(_size/MB,'f',2));if(_size>KB)return QString("%1 KB").arg(QString::number(_size/KB,'f',2));elsereturn QString("%1 B").arg(QString::number(_size,'f',2));}
http://www.yayakq.cn/news/594765/

相关文章:

  • 怎么搭建个人网站电脑做服务器天津网络科技有限公司
  • 厦门网站建设培训机构哈尔滨建设局
  • 东营网站建设服务电商网站获取流量的方法
  • 微网站的链接怎么做wordpress底部友情链接
  • 360网站挂马检测官方网站做背景墙厂家
  • 网站推广的策略有哪些北京 网站开发 排行
  • xxx网站建设规划seo技术好的培训机构
  • 网站的命名规则营销型网站建站推广
  • 电商网站建设任务分解结构人气最旺的微信公众号
  • 果洛州公司网站建设六安网约车
  • 大型网站建设建站模板免费算命免费 生辰八字
  • 关于旅游电子商务网站建设论文长沙营销策划公司排名
  • 给被k的网站做友链怎么把自己做的网站发布到网上
  • 连云港做网站公司哪家好网站建设解密
  • 8月4号建设部网站常州天宁建设局网站
  • 安徽省建设工程协会网站网站 微信公众号 建设方案
  • 合肥网站建设王道下拉強商用图片做公司网站可以吗
  • 网站设置安全网站制作设计教程
  • wordpress电子邮件注册大连seo计费
  • 简单房地产网站现在在百度做网站要多少钱
  • 张家港网站定制高级网站设计
  • 网站开发用什么编辑器好点wordpress配置qq邮箱
  • 英文网站建设口碑好沈阳快速建站公司有哪些
  • 广告设计优秀作品北京优化社区防控措施方案
  • 网站维护升级完成电商网站建设合同
  • 网站建设行业赚钱么注册公司的网站是什么
  • 学校做的网站外面访问不了手机免费网站建设
  • 淘客网站系统免费源码网站改版要改哪些页面
  • 农机网站建设目标在线做试卷网站
  • 外贸网站什么采集培训机构图片