在 QT C++ 的 zip 文件中将数据库文件备份为 sql
Backup the database file as sql inside the zip file on QT C++
我想通过在 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);
你能帮帮我吗?
简单的方法是分两步执行:转储然后压缩
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
函数。这需要链接库并包括 headers 和来自 zlib\contrib\minizip
.
的来源
我想通过在 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);
你能帮帮我吗?
简单的方法是分两步执行:转储然后压缩
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
函数。这需要链接库并包括 headers 和来自 zlib\contrib\minizip
.