| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #include "dialogdbbackupandrecovery.h"
- #include "ui_dialogdbbackupandrecovery.h"
- #include "sncdatabase.h"
- #include "zip.h"
- #include "unzip.h"
- DialogDbBackupAndRecovery::DialogDbBackupAndRecovery(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::DialogDbBackupAndRecovery)
- {
- ui->setupUi(this);
- }
- DialogDbBackupAndRecovery::~DialogDbBackupAndRecovery()
- {
- delete ui;
- }
- void DialogDbBackupAndRecovery::on_pushButtonBackup_clicked()
- {
- QFileDialog::Options options;
- QString selectedFilter;
- QString exportDir = SNCDataBase::getExportDir();
- if(exportDir.isEmpty())
- {
- exportDir = QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
- }
- QString zipName = QFileDialog::getSaveFileName(this,
- "备份文件",exportDir,
- tr("Backup Files (*.bak)"),
- &selectedFilter,
- options);
- QStringList files;
- QString dbdir;
- dbdir=QCoreApplication::applicationDirPath();
- QString sysdbfile = dbdir+"/sys.db";
- QString userdbfile = dbdir+"/../data/user.db";
- QString msegdbfile = dbdir + "/mseg.db";
- files<<sysdbfile<<userdbfile<<msegdbfile;
- if(!zipName.isEmpty())
- {
- setCursor(Qt::WaitCursor);
- if(addFileToZip(zipName,files))
- {
- QMessageBox::information(this, tr("提示"),QString(tr("数据备份成功!")),QMessageBox::Ok );
- }
- else
- {
- QMessageBox::critical(this, tr("提示"),QString(tr("数据备份失败!")),QMessageBox::Ok );
- }
- setCursor(Qt::ArrowCursor);
- }
- else
- return ;
- }
- bool DialogDbBackupAndRecovery::addFileToZip(QString zipName, QStringList files)
- {
- Zip::ErrorCode ec;
- Zip uz;
- QFile file(zipName);
- if(!file.open(QIODevice::WriteOnly)){
- return false ;
- }
- file.close();
- ec = uz.createArchive(zipName);
- if (ec != Zip::Ok) {
- return false;
- }
- ec = uz.addFiles(files);
- if (ec != Zip::Ok) {
- uz.closeArchive();
- return false;
- }
- if (uz.closeArchive() != Zip::Ok) {
- return false;
- }
- return true;
- }
- void DialogDbBackupAndRecovery::on_pushButtonRecovery_clicked()
- {
- QFileDialog::Options options;
- //options |= QFileDialog::con;
- QString selectedFilter;
- QString exportDir = SNCDataBase::getExportDir();
- if(exportDir.isEmpty())
- {
- exportDir = QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
- }
- QString zipName = QFileDialog::getOpenFileName(this,
- "恢复文件",exportDir,
- tr("Backup Files (*.bak)"),
- &selectedFilter,
- options);
- if(!zipName.isEmpty())
- {
- if(QMessageBox::Yes ==QMessageBox::question(this,"确认","确定进行数据恢复吗?",\
- QMessageBox::Yes,QMessageBox::No))
- {
- if(unzip(zipName))
- {
- QMessageBox::information(this, tr("提示"),QString(tr("数据恢复成功,请重新启动程序后生效!")),\
- QMessageBox::Ok );
- }
- else
- {
- QMessageBox::critical(this, tr("提示"),QString(tr("数据恢复失败!")),QMessageBox::Ok );
- }
- }
- }
- }
- bool DialogDbBackupAndRecovery::unzip(QString zipfile)
- {
- UnZip::ErrorCode ec;
- UnZip uz;
- QDir dir;
- if(!dir.exists(QDir::tempPath()+"/dbbak"))
- {
- dir.mkdir(QDir::tempPath()+"/dbbak");
- }
- else
- {
- //准备目录并删除该目录下的所有文件
- QDir dir(QDir::tempPath()+"/dbbak");
- QFileInfoList list = dir.entryInfoList();
- for(int i=0;i<list.size();i++)
- {
- if(list.at(i).isFile())
- {
- qDebug()<<"delete file :"<<list.at(i).absoluteFilePath();
- QFile::remove(list.at(i).absoluteFilePath());
- }
- }
- }
- ec = uz.openArchive(zipfile);
- if (ec != UnZip::Ok) {
- qDebug() << "Failed to open archive: " << uz.formatError(ec).toAscii().data() << endl << endl;
- return false ;
- }
- ec = uz.extractAll(QDir::tempPath()+"/dbbak");
- if (ec != UnZip::Ok) {
- qDebug() << "Extraction failed: " << uz.formatError(ec).toAscii().data() << endl << endl;
- uz.closeArchive();
- return false ;
- }
- QFile::copy(QDir::tempPath()+"/dbbak/sys.db",QCoreApplication::applicationDirPath()+"/sys.sncbak");
- QFile::copy(QDir::tempPath()+"/dbbak/mseg.db",QCoreApplication::applicationDirPath()+"/mseg.sncbak");
- QFile::copy(QDir::tempPath()+"/dbbak/user.db",QCoreApplication::applicationDirPath()+"/../data/user.sncbak");
- return true;
- }
|