简体   繁体   English

在 QT 上的 zip 文件中备份数据库文件为 sql C++

[英]Backup the database file as sql inside the zip file on QT C++

I want to backup my database by creating a zip file with qprocess in the QT program, in the code below it does it as a sql file.我想通过在 QT 程序中使用 qprocess 创建一个 zip 文件来备份我的数据库,在下面的代码中它将它作为一个 sql 文件。 How can I make a backup inside the zip file?如何在 zip 文件中进行备份?

QProcess dump(this);
QStringlist args;
QString path="C:/Users/ali/Desktop/dbfile/db.sql";
args<<"-uroot"<<"-proot"<<"denemesql";
dump.setStandardOutputFile(path);
dump.start("mysqldump.exe",args);

if(!dump.waitForStarted(1000))
{
qDebug()<<dump.errorString();
}

dump.waitForFinished(-1);

can you help me?你能帮助我吗?

The easy way is perform it in two steps: dump and then zip简单的方法是分两步执行:转储然后 zip

bool dump1() {
    QString path = "C:/Users/ali/Desktop/dbfile/db.sql";
    QString zipPath = "C:/Users/ali/Desktop/dbfile/db.zip";

    QProcess dump;
    dump.setProgram("mysqldump.exe");
    dump.setArguments({"-uroot", "-proot", "denemesql"});
    dump.setStandardOutputFile(path);
    dump.start();

    if (!dump.waitForStarted()) {
        qDebug() << dump.error();
        return false;
    }
    if (!dump.waitForFinished()) {
        qDebug() << dump.error();
        return false;
    }

    QProcess zip;
    zip.setProgram("C:\\Program Files\\7-Zip\\7z.exe");
    zip.setArguments({"a", zipPath, path});
    zip.start();
    if (!zip.waitForStarted()) {
        qDebug() << dump.error();
        return false;
    }
    if (!zip.waitForFinished()) {
        qDebug() << dump.error();
        return false;
    }
    QFile(path).remove();
    return true;
}

You can avoid creating temporary file piping ouput of dump directly to 7z,but you will be limited to gzip format.您可以避免创建临时文件管道输出直接转储到 7z,但您将被限制为 gzip 格式。


bool dump2() {

    QString gzipPath = "C:/Users/ali/Desktop/dbfile/db.gz";
    QString fileName = "db.sql";

    QProcess dump;
    dump.setProgram("mysqldump.exe");
    dump.setArguments({"-uroot", "-proot", "denemesql"});

    QProcess zip;
    zip.setProgram("C:\\Program Files\\7-Zip\\7z.exe");
    zip.setArguments({"a", gzipPath, "-si" + fileName});
    dump.setStandardOutputProcess(&zip);

    dump.start();
    zip.start();

    if (!dump.waitForStarted()) {
        qDebug() << dump.error();
        return false;
    }
    if (!zip.waitForStarted()) {
        qDebug() << zip.error();
        return false;
    }
    if (!dump.waitForFinished()) {
        qDebug() << dump.error();
        return false;
    }
    if (!zip.waitForFinished()) {
        qDebug() << zip.error();
        return false;
    }
    return true;
}

The hard way is to use zlib, you can add it to your project and use困难的方法是使用 zlib,你可以将它添加到你的项目中并使用

zipOpen
zipOpenNewFileInZip
zipWriteInFileInZip
zipCloseFileInZip
zipClose

functions.职能。 This requires linking library and including headers and sources from zlib\contrib\minizip .这需要链接库并包括来自zlib\contrib\minizip的标头和源代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM