Angelo Lee's Blog
This is my kingdom .If i don't fight for it ,who will ?

windows 下调用gzip.exe 和tar.exe解压*.tar.gz压缩包到指定目录

如:解压D:/test/1.tar.gz 到E:/test/下

1.切换到压缩包所在目录下

cd /d D:

 

2.调用gzip.exe解压.gz压缩文件

gzip /test/1.tar.gz

 

3.调用tar.exe解包.tar

tar xvf /test/1.tar -C //./E:/test/

 

下面是我自己用QT写的解压函数,windows 和 linux 都适用。

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QProcess>
#include <QDebug>
typedef int BOOL;
#define RET_FAILED -1
#define RET_SUCCESS 0

BOOL Extract(QString fileName,QString dstPath)
{
    if(fileName.length()<8 || fileName.right(7)!=".tar.gz")
    {
        qDebug()<<"Extract error:unknown file format,mast be '.tar.gz'";
        return RET_FAILED;
    }
    if(dstPath.length() == 0)
    {
        return RET_FAILED;
    }
    int ret;
    QProcess p;
    fileName = fileName.replace("//","/");

    qDebug()<<"Extrating "<<fileName<<" to "<<dstPath<<" ...";
    if(fileName.at(1) == ':')
    {
        QString driveId = fileName.left(2);
        fileName = fileName.right(fileName.length()-2);
        p.execute("cd /d " + driveId);
    }
    qDebug()<<"start to ungzip "<<fileName<<" ...";
    ret = p.execute("gzip -d " + fileName);

    if(ret != 0)
    {
        qDebug()<<"gzip returns error code:"<<ret;
    }
    qDebug()<<"ungzip "<<fileName<<" success!";
    fileName = fileName.left(fileName.length()-3);
    if(dstPath.at(1) == ':')
    {
        dstPath = "//./" + dstPath;
    }
    qDebug()<<"start to untar "<<fileName<<" ...";
    p.execute("tar xvf " + fileName + " -C " + dstPath);
    if(ret != 0)
    {
        qDebug()<<"tar returns error code:"<<ret;
    }
    qDebug()<<"untar "<<fileName<<" success!";
    QFile::remove(fileName);

    return RET_SUCCESS;
}


posted on 2013-01-04 22:48  Angelo Lee  阅读(300)  评论(0编辑  收藏  举报