# Qt压缩文件及文件夹

Qt压缩文件及文件夹

    QString zipPath  = QCoreApplication::applicationDirPath() + "/";
    QFileInfoList fileList = QFileInfoList() ;
    QZipWriter *writer = new QZipWriter(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/" + tr("test.zip"));//压缩包压缩完成后直接放在桌面

    fileList = GetFileList(zipPath );
    // 遍历文件列表
    foreach (QFileInfo fileInfo, fileList) {
        //添加需要压缩的文件
        QFile file(fileInfo.filePath());
        if (!file.exists()) continue;
        file.open(QIODevice::ReadOnly);
        writer->addFile(fileInfo.fileName(), file.readAll());//添加要压缩的目标文件
        file.close();
    }

//可执行程序路径下有arrange文件夹,arrange文件夹下有Arrange.xml文件
    QString fileName = QCoreApplication::applicationDirPath() + QStringLiteral("/arrange/Arrange.xml");//获取文件夹下的文件
    QFile file(fileName);
    file.open(QIODevice::ReadOnly);//以只读方式打开该路径下的文件
    writer->addFile(QStringLiteral("arrange/Arrange.xml") ,file.readAll());//添加文件夹下的文件至压缩文件中
    file.close();
    writer->close();
    if(writer)
    {
        delete writer;
        writer = nullptr;
    }
    //最后压缩好的压缩包中有file1、file2、arrange文件夹
QFileInfoList MainWindow::GetFileList(QString path)
{
    QDir dir(path);
    QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    QFileInfoList file_newlist;
    for(int i=0; i<file_list.size(); i++){
        if((file_list.at(i).completeBaseName() == tr("file1")) || (file_list.at(i).completeBaseName() == tr("file2")) ){//将该目录下的file1和file2打包压缩
             file_newlist.append(file_list.at(i));
        }
    }

    return file_newlist;
}

头文件

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

.pro

添加: gui-private
`

头文件

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

你可能感兴趣的:(qt,c++,开发语言)