qt使用zlib压缩文件夹,解压缩
时间: 2023-11-17 19:07:44 浏览: 53
Qt提供了一个名为“zlib”的库,可以用于压缩和解压缩文件和文件夹。
以下是一个压缩文件夹的示例代码:
```cpp
#include <QtCore>
#include <QtZlib>
void compressFolder(const QString& folderPath, const QString& zipFilePath)
{
QFile outFile(zipFilePath);
if (!outFile.open(QIODevice::WriteOnly))
{
qDebug() << "Failed to open output file: " << zipFilePath;
return;
}
QZipWriter zipWriter(&outFile);
QDirIterator dirIt(folderPath, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while (dirIt.hasNext())
{
dirIt.next();
QString filePath = dirIt.filePath();
QString relativePath = QDir(folderPath).relativeFilePath(filePath);
if (dirIt.fileInfo().isDir())
{
zipWriter.addDirectory(relativePath);
}
else
{
QFile inFile(filePath);
if (!inFile.open(QIODevice::ReadOnly))
{
qDebug() << "Failed to open input file: " << filePath;
continue;
}
QByteArray fileData = inFile.readAll();
QByteArray compressedData = qCompress(fileData);
zipWriter.addFile(relativePath, compressedData);
}
}
zipWriter.close();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString folderPath = "path/to/folder";
QString zipFilePath = "path/to/zip/file.zip";
compressFolder(folderPath, zipFilePath);
return a.exec();
}
```
以上代码会递归地遍历文件夹,将所有文件压缩并写入到一个zip文件中。
接下来是解压缩文件夹的示例代码:
```cpp
#include <QtCore>
#include <QtZlib>
void decompressFolder(const QString& zipFilePath, const QString& outputFolder)
{
QFile inFile(zipFilePath);
if (!inFile.open(QIODevice::ReadOnly))
{
qDebug() << "Failed to open input file: " << zipFilePath;
return;
}
QZipReader zipReader(&inFile);
if (!zipReader.exists())
{
qDebug() << "Input file is not a valid zip file: " << zipFilePath;
return;
}
QDir outputDir(outputFolder);
if (!outputDir.exists())
{
outputDir.mkpath(".");
}
for (QString filePath : zipReader.fileNames())
{
QByteArray compressedData = zipReader.fileData(filePath);
QByteArray fileData = qUncompress(compressedData);
QString outputPath = outputDir.filePath(filePath);
QFileInfo fileInfo(outputPath);
QDir outputSubDir(fileInfo.absolutePath());
if (!outputSubDir.exists())
{
outputSubDir.mkpath(".");
}
QFile outFile(outputPath);
if (!outFile.open(QIODevice::WriteOnly))
{
qDebug() << "Failed to open output file: " << outputPath;
continue;
}
outFile.write(fileData);
outFile.close();
}
zipReader.close();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString zipFilePath = "path/to/zip/file.zip";
QString outputFolder = "path/to/output/folder";
decompressFolder(zipFilePath, outputFolder);
return a.exec();
}
```
以上代码会解压缩一个zip文件并将所有文件写入到指定的输出文件夹中。
请注意,以上代码仅供参考,并未经过完整测试。在实际应用中,可能需要添加更多的错误处理和边界检查。
相关推荐
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)