2

嗨,我正在开发一个应用程序来解压缩 blackberry10 中的文件。对于解压缩文件,我使用的是从 github 获得的 quazip 库代码。但我不知道如何将此库添加到我的项目中,任何人都可以告诉我如何将库添加到黑莓级联。

4

2 回答 2

2

要在 Momentics 中将库添加到您的 BlackBerry 10 项目,您只需右键单击该项目并转到配置->添加库...

这将启动添加库向导,您可以在其中指定库的路径。请记住更新您的.pro文件。执行此操作的说明在向导中。如果您要动态链接它,您还需要更新您bar-descriptor.xml的库,以便将该库作为资产打包在您的 BAR 文件中。

于 2012-11-20T17:43:03.307 回答
-1

我有在我的项目中使用 quazip 库的成功经验。为了让它在您的应用程序中运行,您需要遵循以下步骤:

1.从QuaZip 主页下载 zip 存档的副本

2.将以下文件复制到您的项目源文件夹中:

qioapi.cpp
quazip.cpp
quazipfile.cpp
quazipnewinfo.cpp
unzip.c
zip.c
crypt.h
ioapi.h
quazipdir.h
quazipfile.h
quazipfileinfo.h
quazip_global.h
quazip.h
quazipnewinfo.h
unzip.h
zip.h

3.创建一个用于处理档案的实用程序类:

头文件:

#ifndef ZIPPER_H_
#define ZIPPER_H_

#include <QObject>
#include <QDir>

#include "quazip.h"
#include "quazipfile.h"

class Zipper : public QObject {
        Q_OBJECT

public:
        Zipper() {}
        virtual ~Zipper() {}

        static bool extract(const QString & filePath, const QString & extDirPath, const QString & singleFileName = QString(""));
        static bool archive(const QString & filePath, const QDir & dir, const QString & comment = QString(""));

        Q_DISABLE_COPY(Zipper)
};

源文件:

#include <QFile>
#include <QDir>
#include "Zipper.h"

bool Zipper::extract(const QString & filePath, const QString & extDirPath, const QString & singleFileName) {
        QuaZip zip(filePath);

        if (!zip.open(QuaZip::mdUnzip)) {
            qWarning("testRead(): zip.open(): %d", zip.getZipError());
            return false;
        }

        zip.setFileNameCodec("IBM866");

        qWarning("%d entries\n", zip.getEntriesCount());
        qWarning("Global comment: %s\n", zip.getComment().toLocal8Bit().constData());

        QuaZipFileInfo info;

        QuaZipFile file(&zip);

        QFile out;
        QString name;
        char c;
        for (bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) {

            if (!zip.getCurrentFileInfo(&info)) {
                qWarning("testRead(): getCurrentFileInfo(): %d\n", zip.getZipError());
                return false;
            }

            if (!singleFileName.isEmpty())
                if (!info.name.contains(singleFileName))
                    continue;

            if (!file.open(QIODevice::ReadOnly)) {
                qWarning("testRead(): file.open(): %d", file.getZipError());
                return false;
            }

            name = QString("%1/%2").arg(extDirPath).arg(file.getActualFileName());

            if (file.getZipError() != UNZ_OK) {
                qWarning("testRead(): file.getFileName(): %d", file.getZipError());
                return false;
            }

            //out.setFileName("out/" + name);
            qWarning ("using %s for output fileName", qPrintable(name));
            out.setFileName(name);

            // this will fail if "name" contains subdirectories, but we don't mind that
            out.open(QIODevice::WriteOnly);
            // Slow like hell (on GNU/Linux at least), but it is not my fault.
            // Not ZIP/UNZIP package's fault either.
            // The slowest thing here is out.putChar(c).
            while (file.getChar(&c)) out.putChar(c);

            out.close();

            if (file.getZipError() != UNZ_OK) {
                qWarning("testRead(): file.getFileName(): %d", file.getZipError());
                return false;
            }

            if (!file.atEnd()) {
                qWarning("testRead(): read all but not EOF");
                return false;
            }

            file.close();

            if (file.getZipError() != UNZ_OK) {
                qWarning("testRead(): file.close(): %d", file.getZipError());
                return false;
            }
        }

        zip.close();

        if (zip.getZipError() != UNZ_OK) {
            qWarning("testRead(): zip.close(): %d", zip.getZipError());
            return false;
        }

        return true;
}


bool Zipper::archive(const QString & filePath, const QDir & dir, const QString & comment) {

        QuaZip zip(filePath);
        zip.setFileNameCodec("IBM866");

        if (!zip.open(QuaZip::mdCreate)) {
            qDebug("testCreate(): zip.open(): %d", zip.getZipError());
            return false;
        }

        if (!dir.exists()) {
            qDebug("dir.exists(%s)=FALSE", qPrintable(dir.absolutePath()));
            return false;
        }

        QFile inFile;

        QStringList sl;
        // what's this ??
//      recurseAddDir(dir, sl);

        QFileInfoList files;
        foreach (QString fn, sl) files << QFileInfo(fn);

        QuaZipFile outFile(&zip);

        char c;
        foreach(QFileInfo fileInfo, files) {

            if (!fileInfo.isFile())
                continue;

            QString fileNameWithRelativePath = fileInfo.filePath().remove(0, dir.absolutePath().length() + 1);

            inFile.setFileName(fileInfo.filePath());

            if (!inFile.open(QIODevice::ReadOnly)) {
                qDebug("testCreate(): inFile.open(): %s", qPrintable(inFile.errorString()));
                return false;
            }

            if (!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(fileNameWithRelativePath, fileInfo.filePath()))) {
                qDebug("testCreate(): outFile.open(): %s", qPrintable(outFile.getZipError()));
                return false;
            }

            while (inFile.getChar(&c) && outFile.putChar(c));

            if (outFile.getZipError() != UNZ_OK) {
                qDebug("testCreate(): outFile.putChar(): %d", outFile.getZipError());
                return false;
            }

            outFile.close();

            if (outFile.getZipError() != UNZ_OK) {
                qDebug("testCreate(): outFile.close(): %d", outFile.getZipError());
                return false;
            }

            inFile.close();
        }

        if (!comment.isEmpty())
            zip.setComment(comment);

        zip.close();

        if (zip.getZipError() != 0) {
                qDebug("testCreate(): zip.close(): %d", zip.getZipError());
            return false;
        }

        return true;
}

4.然后像这样在你的项目中使用它:

bool rc = Zipper::extract(filePath, pathToUnpack);
qDebug("extracting %s", rc ? "success" : "failure");
于 2013-02-13T05:07:32.817 回答