精华内容
下载资源
问答
  • qt 压缩文件文件夹
    2021-05-16 01:49:24

    环境:

    QT3.3.8

    vs2005

    QDir dir("/home/Blinux/html");

    if ( !dir.exists() )

    {

    //目录不存在

    }

    QString strZip = ""/home/Blinux/html".zip";

    m_pProcess->setWorkingDirectory(dir); //设置工作空间

    m_pProcess->addArgument(QString("zip"));

    m_pProcess->addArgument(QString("-r"));

    m_pProcess->addArgument(QString("-j"));

    m_pProcess->addArgument(strZip);

    m_pProcess->addArgument( QString("*") );

    int nn=0;

    if(m_pProcess->start())

    {

    //QByteArray arr = m_pProcess->readStdout();

    while(m_pProcess->isRunning())

    {

    nn++;

    arr = m_pProcess->readStdout();

    if(nn>10)

    {

    m_pProcess->tryTerminate();

    m_pProcess->clearArguments();

    return false;

    }

    sleep(100);

    }

    }

    else

    {

    //启动失败

    }

    在windows系统下运行正常,将/home/Blinux/html压缩为/home/Blinux下的html.zip文件;

    在linux系统下未达到预期效果,在路径/home/Blinux/下并没有生成html.zip文件;

    修改方法:

    将m_pProcess->addArgument( QString("*") ); 改为m_pProcess->addArgument( QString("/home/Blinux/html") );

    也就是说将相对路径“*”,改为绝对路径“/home/Blinux/html”,那么m_pProcess->setWorkingDirectory(dir); 也就没有意义了,可以删除。

    -j 参数的一点说明:

    zip -r -j /home/Blinux/html.zip /home/Blinux/html

    更多相关内容
  • qt 压缩文件文件夹

    2020-11-24 16:05:41
    qt依赖QuaZIP,对文件文件夹进行压缩压缩,内含例子与编译好的库,VS2015环境编译,配置简单实用方便
  • qt 压缩解压文件夹

    千次阅读 2022-04-20 13:37:56
    第一步:pro文件中添加 QT += gui-private 第二步:头文件中添加: #include <QtGui/private/qzipreader_p.h> #include <QtGui/private/qzipwriter_p.h> 第三步:cpp文件中实现: bool zipDir(const ...

    通过的QZipWriter的addFile来实现的。
    第一步:pro文件中添加 QT += gui-private
    第二步:头文件中添加:

    #include <QtGui/private/qzipreader_p.h>
    #include <QtGui/private/qzipwriter_p.h>
    

    第三步:cpp文件中实现:

    //SavePath:压缩到的路径;dirPath:需要压缩的目录。
    bool zipDir(const QString& dirPath,QString SavePath)
    {
        bool  ret;
        QZipWriter *writer = new QZipWriter(SavePath);
        if(QZipWriterEx(writer,dirPath,dirPath))//dirPath为了方便回调,所以传了两次。
            ret=true;
        else
            ret=false;
    
        writer->close();
        delete writer;
        return  ret;
    }
    
    bool  QZipWriterEx(QZipWriter *writer, QString tmpPath, QString basePath)
    {
        QDir dir(tmpPath);
        foreach (QFileInfo info, dir.entryInfoList())
        {
            if (info.fileName() == "." || info.fileName() == "..")
                continue;
            if (info.isFile())
            {
                QFile upfile(info.filePath());
                upfile.open(QIODevice::ReadOnly);
                QString fileName = info.filePath().mid(basePath.size()+1,info.filePath().size());
                writer->addFile(fileName,upfile.readAll());
                qDebug()<<fileName<<tmpPath<<basePath;
                upfile.close();
            }
            else if (info.isDir())
            {
                QZipWriterEx(writer,info.filePath(),basePath);
            }
        }
        return true;
    }
    

    源码路径

    解压:

        QZipReader zipreader(“xxx/xxx/xxx/解压文件目录”);
        unzipok = zipreader.extractAll(“xxx/xxx/xxx/解压位置”);
        zipreader.close();
    
    展开全文
  • QT实现压缩文件和解压缩文件

    一、实现方式

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

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

    二、具体步骤

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

    QT       += core gui gui-private
    

    2、通过QObject方式创建多线程实现压缩与解压缩类

    CompreDecompreFileThread.h
    
    #ifndef COMPREDECOMPREFILETHREAD_H
    #define COMPREDECOMPREFILETHREAD_H
    
    #include <QObject>
    #include "QtGui/private/qzipreader_p.h"
    #include "QtGui/private/qzipwriter_p.h"
    #include <QFileInfoList>
    #include <QDir>
    #include <QFile>
    #include <QThread>
    class CompreDecompreFileThread : public QObject
    {
        Q_OBJECT
    public:
        typedef enum
        {
            success,
            failed,
            running
        }ResultE;
    signals:
        void compression_res_signal(ResultE res,quint8 progress,QString remarks = nullptr);
        void decompression_res_signal(ResultE res,quint8 progress,QString remarks = nullptr);
    public slots:
        /*
         * 压缩文件
         */
        void compression_file_run(QString srcPath,QString destPath);
        /*
         * 解压文件
         */
        void decompression_file_run(QString srcPath,QString destPath);
    public:
        explicit CompreDecompreFileThread(QObject *parent = nullptr);
    private:
        /*
         * 遍历压缩文件
         */
        QFileInfoList ergodic_compression_file(QZipWriter *writer,QString rootPath,QString filePath);
    
    private:
        QZipWriter *zipWriter = nullptr;
        QZipReader *zipReader = nullptr;
    };
    
    #endif // COMPREDECOMPREFILETHREAD_H
    
    
    CompreDecompreFileThread.cpp
    
    #include "compredecomprefilethread.h"
    
    
    
    CompreDecompreFileThread::CompreDecompreFileThread(QObject *parent)
        : QObject{parent}
    {
    
    }
    
    QFileInfoList CompreDecompreFileThread::ergodic_compression_file(QZipWriter *writer, QString rootPath, QString filePath)
    {
        QDir dir(filePath);          //遍历各级子目录
        QDir fileDir(filePath);    //遍历子目录中所有文件
    
        //先遍历文件夹 添加进widget
        QFileInfoList fileList=dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
        QFileInfoList folderList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);   //获取当前所有目录 QDir::Dirs 0x001 列出目录;
    
    
        for(int i = 0; i != folderList.size(); i++)         //自动递归添加各目录到上一级目录
        {
            QString namepath = folderList.at(i).absoluteFilePath();    //获取路径
            QFileInfo folderinfo= folderList.at(i);
            QString name=folderinfo.fileName();      //获取目录名
    
    
            QStringList list = folderinfo.absoluteFilePath().split(rootPath);
            //qDebug()<<"Dir:"<<folderinfo.absoluteFilePath().remove(list.at(0));
            writer->addDirectory(folderinfo.absoluteFilePath().remove(list.at(0)));
    
            QFileInfoList child_file_list = ergodic_compression_file(writer,rootPath,namepath);          //进行递归 递归这个文件夹
            fileList.append(child_file_list);
            //  file_list.append(name);
    
        }
        /*添加path路径文件*/
    
        fileDir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);        //获取当前所有文件
        fileDir.setSorting(QDir::Name);
        QFileInfoList _fileList = fileDir.entryInfoList();
        for (int i = 0; i < _fileList.size(); ++i) //将当前目录中所有文件添加到treewidget中
        {
            QFileInfo fileInfo = _fileList.at(i);
    
            QFile file(fileInfo.absoluteFilePath());
            if(file.open(QIODeviceBase::ReadOnly))
            {
                QStringList list = fileInfo.absoluteFilePath().split(rootPath);
                //qDebug()<<"File:"<<fileInfo.absoluteFilePath().remove(list.at(0));
                writer->addFile(fileInfo.absoluteFilePath().remove(list.at(0)),file.readAll());
                file.close();
            }
    
        }
        return fileList;
    }
    void CompreDecompreFileThread::compression_file_run(QString srcPath, QString destPath)
    {
        qDebug()<<QThread::currentThreadId();
        if(srcPath == nullptr || destPath == nullptr)
        {
            emit compression_res_signal(ResultE::failed,100,tr("路径为空!"));
            return;
        }
        QFileInfo fileDistInfo(destPath);
        if(fileDistInfo.isFile())   //目的路径不能为文件名
        {
            emit compression_res_signal(ResultE::failed,100,tr("路径不能为文件!"));
            return;
        }
    
    
        QFileInfo fileInfo(srcPath);
        if(fileInfo.isFile())//压缩的是一个文件
        {
            QString saveFileName = destPath+"/"+fileInfo.baseName()+".zip";
            qDebug()<<"saveFileName:"<<saveFileName;
            this->zipWriter = new QZipWriter(saveFileName);
            QFile file(srcPath);
            if(!file.open(QIODeviceBase::ReadOnly))
            {
                emit compression_res_signal(ResultE::failed,100,tr("文件打开失败!"));
                return;
            }
            emit compression_res_signal(ResultE::running,50,tr("正在压缩中..."));
            this->zipWriter->addFile(file.fileName(),file.readAll());
            this->zipWriter->close();
            delete this->zipWriter;
            this->zipWriter = nullptr;
            emit compression_res_signal(ResultE::running,100,tr("正在压缩中..."));
            emit compression_res_signal(ResultE::success,100,tr("压缩完成!"));
        }
        else    //压缩的是一个文件夹
        {
            QString folderStr = srcPath.mid(srcPath.lastIndexOf("/")).remove("/");
            if(folderStr == nullptr)
            {
                emit compression_res_signal(ResultE::failed,100,tr("压缩文件路径错误!"));
                return;
            }
            emit compression_res_signal(ResultE::running,50,tr("正在压缩中..."));
            QString saveFileName = destPath+"/"+folderStr+".zip";
            qDebug()<<"saveFileName:"<<saveFileName;
            this->zipWriter = new QZipWriter(saveFileName);
            this->zipWriter->addDirectory(folderStr);
            this->ergodic_compression_file(this->zipWriter,folderStr,srcPath);
            delete this->zipWriter;
            this->zipWriter = nullptr;
            emit compression_res_signal(ResultE::running,100,tr("正在压缩中..."));
            emit compression_res_signal(ResultE::success,100,tr("压缩完成!"));
        }
    
    }
    
    void CompreDecompreFileThread::decompression_file_run(QString srcPathAndName, QString destPath)
    {
        qDebug()<<QThread::currentThreadId();
        if(srcPathAndName == nullptr || destPath == nullptr)
        {
            emit decompression_res_signal(ResultE::failed,100,tr("路径为空!"));
            return;
        }
        QFileInfo destInfo(destPath);
        if(destInfo.isFile()||!destInfo.exists())
        {
            emit decompression_res_signal(ResultE::failed,100,tr("目的路径异常!"));
            return;
        }
    
        QFileInfo fileInfo(srcPathAndName);
        if(!fileInfo.isFile() || fileInfo.suffix() !="zip")
        {
            emit decompression_res_signal(ResultE::failed,100,tr("压缩文件为空!"));
            return;
        }
        emit decompression_res_signal(ResultE::running,50,tr("正在解压缩..."));
        this->zipReader = new QZipReader(srcPathAndName);
        bool res = this->zipReader->extractAll(destPath);
        emit decompression_res_signal(ResultE::running,100,tr("正在解压缩..."));
        if(res) //解压缩成功
        {
            emit decompression_res_signal(ResultE::success,100,tr("解压缩完成!"));
        }
        else
        {
             emit decompression_res_signal(ResultE::failed,100,tr("解压缩失败!"));
        }
    
        this->zipReader->close();
        delete this->zipReader;
        this->zipReader = nullptr;
    
    }
    
    

    3、通过信号与槽触发操作

    mainWindow.h
    
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include "QtGui/private/qzipreader_p.h"
    #include "QtGui/private/qzipwriter_p.h"
    #include <QFileInfoList>
    #include <QDir>
    #include <QFile>
    
    #include "compredecomprefilethread.h"
    
    #include <QThread>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    signals:
        void compress_signal(QString srcPath,QString destPath);
        void decompress_signal(QString srcPath,QString destPath);
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private slots:
        void on_btnZip_clicked();
    
        void on_btnUnZip_clicked();
    
        void compress_res_slot(CompreDecompreFileThread::ResultE res,quint8 progress,QString remarks = nullptr);
        void decompress_res_slot(CompreDecompreFileThread::ResultE res,quint8 progress,QString remarks = nullptr);
    
    private:
        Ui::MainWindow *ui;
        CompreDecompreFileThread *compreDecompreFileThread;
        QThread *compreDecompreFileMainThread;
    
    };
    #endif // MAINWINDOW_H
    
    
    mainWindow.cpp
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        compreDecompreFileThread = new CompreDecompreFileThread;
        compreDecompreFileMainThread = new QThread;
    
        compreDecompreFileThread->moveToThread(compreDecompreFileMainThread);
        compreDecompreFileMainThread->start();
    
        connect(this,&MainWindow::compress_signal,compreDecompreFileThread,&CompreDecompreFileThread::compression_file_run);
        connect(this,&MainWindow::decompress_signal,compreDecompreFileThread,&CompreDecompreFileThread::decompression_file_run);
    
        connect(compreDecompreFileThread,&CompreDecompreFileThread::compression_res_signal,this,&MainWindow::compress_res_slot);
        connect(compreDecompreFileThread,&CompreDecompreFileThread::decompression_res_signal,this,&MainWindow::decompress_res_slot);
        qDebug()<<QThread::currentThreadId();
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    
    //bool zipReader(QString zipPath="test.zip", QString zipDir="")
    //{
    //    QDir tempDir;
    //    if(!tempDir.exists(zipDir)) tempDir.mkpath(zipDir);
    //    QZipReader reader(zipPath);
    //    return reader.extractAll(zipDir);
    //}
    
    void MainWindow::on_btnZip_clicked()
    {
        QString filePath = QApplication::applicationDirPath()+"/test";
        QString zipPath = QApplication::applicationDirPath();
    
        emit compress_signal(filePath,zipPath);
    
    }
    
    
    void MainWindow::on_btnUnZip_clicked()
    {
        QString filePath = QApplication::applicationDirPath()+"/test.zip";
        QString zipPath = QApplication::applicationDirPath()+"/unTest";
    
        emit decompress_signal(filePath,zipPath);
    }
    
    void MainWindow::compress_res_slot(CompreDecompreFileThread::ResultE res, quint8 progress, QString remarks)
    {
        qDebug()<<"Com:"<<"  res:"<<res<<"  progress:"<<progress<<"  remarks:"<<remarks;
    }
    
    void MainWindow::decompress_res_slot(CompreDecompreFileThread::ResultE res, quint8 progress, QString remarks)
    {
        qDebug()<<"deCom:"<<"  res:"<<res<<"  progress:"<<progress<<"  remarks:"<<remarks;
    }
    
    
    
    mainWindow.ui
    

    在这里插入图片描述

    三、工程文件下载

    工程文件下载点击我

    展开全文
  • Qt删除文件夹文件

    2022-08-24 18:49:15
    Qt删除文件夹文件夹下的文件

    //删除文件夹
    删除文件夹需要注意的是,如果文件夹不是空的,就删除不掉。
    所以,思路就是:
    1.遍历文件夹,删除所有文件和子文件夹,文件直接删掉
    2.如果是子文件夹,就再次遍历调用,删除子文件夹中所有文件,然后再删除自己
    3.等待所有子文件夹都删除了,再删除掉文件夹

    bool deleteDir(const QString &path)
    {
        if (path.isEmpty())
        {
              return false;
        }
        QDir dir(path);
        if(!dir.exists())
        {
            return true;
        }
        dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
        QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
        foreach (QFileInfo file, fileList)
        { //遍历文件信息
            if (file.isFile())
            { // 是文件,删除
                file.dir().remove(file.fileName());
            }else
            { // 递归调用函数,删除子文件夹
                deleteDir(file.absoluteFilePath());
            }
        }
        return dir.rmpath(dir.absolutePath()); // 这时候文件夹已经空了,再删除文件夹本身
    }
    
    展开全文
  • # Qt压缩文件文件夹

    2022-09-15 14:08:42
    # Qt压缩文件文件夹
  • QString ...//该目录下的具体文件的时间 QFileInfoList file_info_list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files, QDir::Time); //只获取该目录下的文件,按最迟修改时间排序 QDate...
  • Qt文件夹压缩成ZIP文件

    千次阅读 2016-11-04 13:31:42
    在网上搜了一下,用Qt文件夹压缩成ZIP文件,大概有两种方法: 1、使用 QProcess 直接调用本地的exe完成压缩工作。 2、使用QuaZIP库。QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库。详见...
  • qt 压缩解压缩文件文件夹源码

    热门讨论 2011-10-18 11:39:32
    可是使用quazip类库实现文件文件夹压缩与解压缩,经测试可以使用
  • QuaZIP是什么 QuaZIP is a simple C++ wrapper over Gilles Vollant’s ZIP/UNZIP package ... It uses the Qt toolkit. 官方主页:http://quazip.sourceforge.net/ github地址:https://github.com/stachenov/quazip
  • QT中调用winrar.exe程序进行文件/文件夹压缩文件压缩解压 文件压缩 QProcess pro(0); QString t1 = "WinRaR.exe"; QStringList t2; t2.append("a"); t2.append("-ep1"); t2.append("-r"); t2.append("-ibck"); t2....
  • qt在linux系统下实现压缩文件

    千次阅读 2019-01-15 15:10:18
    编程进行文件压缩一般有三种方法: 一是使用zlib的C++开源源码; 二是使用Quazip动态库; 三就是在子进程中使用第三方软件。 由于在windows中开发qt程序使用了zlib源码库;而linux下的命令行操作又如此简单。这里用...
  • 在开发过程中,通常会输出一些日志,... 递归遍历文件夹下所有文件 #include <QtCore/QCoreApplication> #include <QDir> #include <QFileInfoList> #include <QDateTime> #include <QDeb
  • //定义接口 class Dll7ZipInterface { public: virtual ~Dll7ZipInterface(){} virtual QString extract(const QString& sZip, const QString& sDir) = 0; // 解压 virtual QString ... // 压缩解压回调 文件 };
  • QLib7zQLib7z 是从Qt Installer Framework中提取出来的7Z SDK的Qt封装,有压缩,解压,多线程job等。...如果是静态编译,需要再src.pro文件里加上:DEFINES += QLIB7Z_NOLIBzip压缩解压请参见QuaZip:
  • 环境:QT3.3.8vs2005QDir dir("/home/Blinux/html");if ( !dir.exists() ){//目录不存在}QString strZip = ""/home/Blinux/html".zip";m_pProcess->setWorkingDirectory(dir); //设置工作空间m_pProcess->add...
  • 一、压缩库简介 1、zlib 2、quazip
  • 2:在你心间的QT 工程右击添加现有文件,将这两个文件夹的内容添加上去。 3:调用头文件,如下: #include "zlib/zlib.h" #include "quazip/JlCompress.h" 4:使用接口: // 压缩文件夹 JlCompress::...
  • Qt文件夹复制压缩解压小工具源码。通过多线程调用bat脚本对文件夹进行操作,避免直接操作造成界面卡死。文件夹内包含简单脚本文件,仅支持单一文件夹操作。
  • 本文是windows系统,MinGW64位环境,MSVC编译环境下在quazipd和...解压缩在C盘,这里是模拟linux系统环境,解压缩后运行 msys.bat 就可以加载msys,并且把qt的mgw安装目录加入到系统环境变量:C:\Qt\Qt5.12.2\Tools\m
  • Qt5压缩解压缩文件/夹

    千次阅读 2019-08-02 15:21:15
    全网居然没找到一个能直接压缩整个文件夹的c/c++库,就算找到了zlib,karchive,archive等开源库,基本也是在Linux下支持的较好,在win...由此思路,如果自己要压缩文件夹,那就自己遍历,然后自己定义压缩文件的格式...
  • Qt实战案例之利用QDir删除选定文件目录下的空文件夹.zip,可参考文章:https://blog.csdn.net/didi_ya/article/details/126087025
  • Qt基于QuaZIP实现文件压缩/解压(Linux下)一、工具准备二、编译zlib1、下载zlib源码2、配置3、编译与安装三、编译QuaZIP1、下载QuaZIP源码2、将zlib库和头文件加入QuaZIP工程3、使用Qt Creator进行编译四、调用...
  • Qt中提供了qCompress/qUncompress来进行文件压缩与解压,虽然存在些许问题,但是存在即合理!了解一下,并无坏处。
  • Qt 压缩 zip/unzip

    热门讨论 2012-10-29 19:40:30
    Qt开发的文件文件夹压缩以及解压功能,zip,unzip

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,938
精华内容 2,375
关键字:

qt 压缩文件文件夹