我想通過在 QT 程式中使用 qprocess 創建一個 zip 檔案來備份我的資料庫,在下面的代碼中它作為一個 sql 檔案執行。如何在 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);
你能幫助我嗎?
uj5u.com熱心網友回復:
簡單的方法是分兩步執行:轉儲然后壓縮
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;
}
您可以避免創建直接轉儲到 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;
}
困難的方法是使用zlib,你可以將它添加到你的專案中并使用
zipOpen
zipOpenNewFileInZip
zipWriteInFileInZip
zipCloseFileInZip
zipClose
職能。這需要鏈接庫并包括來自zlib\contrib\minizip.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448151.html
上一篇:Qchart從底部洗掉線點
