全网居然没找到一个能直接压缩整个文件夹的c/c++库,就算找到了zlib,karchive,archive等开源库,基本也是在Linux下支持的较好,在win下只有zlib还算是编译过了。而且不能全文件夹压缩的,都是buffer或者单文件压缩,这就好奇了,标准zip怎么搞?原来zip是有一个特定archive的,链接在此。
由此思路,如果自己要压缩文件夹,那就自己遍历,然后自己定义压缩文件的格式就好了,当然不是标准化的压缩格式而已了。但是够自己使用就行。这么理解,实现文件夹的压缩就显得不那么重要了,重要的是压缩算法,而提供压缩算法的库就多了去了,也容易找到。下面就用qt5简单实现一个文件的压缩与解压缩。注意,没有全文件一次读取再压缩,是考虑到文件太大,比如4g,会直接冲爆你的内存。下面测试代码已使用MD5验证通过。show code:
#include <QCoreApplication>
#include <QFile>
#include <QDataStream>
#include <QDebug>
#define READ_BUFFER 10240
bool compress(QString ifile, QString ofile)
{
QFile file(ifile);
QFile output(ofile);
if(file.open(QFile::ReadOnly) &&
output.open(QFile::WriteOnly|QFile::Truncate))
{
QDataStream ds(&output);
while(!file.atEnd())
{
QByteAr