21 #include <QDirIterator>
26 bool MiniZ::isZip(
const QString& sZipFilePath)
29 OnScopeExit(
delete mz);
30 mz_zip_zero_struct(mz);
32 mz_bool ok = mz_zip_reader_init_file(mz, sZipFilePath.
toUtf8().
data(), 0);
33 if (!ok)
return false;
35 int num = mz_zip_reader_get_num_files(mz);
37 mz_zip_reader_end(mz);
45 dd <<
QString(
"Creating Zip %1 from folder %2").
arg(zipFilePath).
arg(srcFolderPath);
53 mz_zip_zero_struct(mz);
55 mz_bool ok = mz_zip_writer_init_file(mz, zipFilePath.
toUtf8().
data(), 0);
58 mz_zip_writer_end(mz);
64 mz_zip_error err = mz_zip_get_last_error(mz);
65 dd <<
QString(
"Miniz writer init failed: error %1, %2").
arg(static_cast<int>(err)).
arg(mz_zip_get_error_string(err));;
69 for (
const QString& filePath : fileList)
71 QString sRelativePath = filePath;
72 sRelativePath.
replace(srcFolderPath,
"");
76 ok = mz_zip_writer_add_file(mz,
78 filePath.toUtf8().data(),
79 "", 0, MZ_BEST_SPEED);
82 mz_zip_error err = mz_zip_get_last_error(mz);
83 dd <<
QString(
"Cannot add %1: error %2, %3").
arg(sRelativePath).
arg(static_cast<int>(err)).
arg(mz_zip_get_error_string(err));
86 ok &= mz_zip_writer_finalize_archive(mz);
89 mz_zip_error err = mz_zip_get_last_error(mz);
90 dd <<
QString(
"Miniz finalize archive failed: error %1, %2").
arg(static_cast<int>(err)).
arg(mz_zip_get_error_string(err));
91 return Status(Status::FAIL, dd);
94 ok &= mz_zip_writer_end(mz);
96 mzScopeGuard.dismiss();
101 mz_zip_error err = mz_zip_get_last_error(mz);
102 dd <<
QString(
"Miniz writer end failed: error %1, %2").
arg(static_cast<int>(err)).
arg(mz_zip_get_error_string(err));
103 return Status(Status::FAIL, dd);
112 dd <<
QString(
"Unzip file %1 to folder %2").
arg(zipFilePath).
arg(destPath);
116 return Status::FILE_NOT_FOUND;
120 QDir baseDir(sBaseDir);
121 if (!baseDir.exists())
123 bool ok = baseDir.mkpath(
".");
127 baseDir.makeAbsolute();
130 mz_zip_zero_struct(mz);
132 mz_bool ok = mz_zip_reader_init_file(mz, zipFilePath.
toUtf8().
data(), 0);
135 mz_zip_reader_end(mz);
140 return Status(Status::FAIL, dd);
142 int num = mz_zip_reader_get_num_files(mz);
145 OnScopeExit(
delete stat);
147 for (
int i = 0; i < num; ++i)
149 ok &= mz_zip_reader_file_stat(mz, i, stat);
151 if (stat->m_is_directory)
156 bool mkDirOK = baseDir.mkpath(sFolderPath);
159 dd <<
"Make Dir failed.";
163 for (
int i = 0; i < num; ++i)
165 ok &= mz_zip_reader_file_stat(mz, i, stat);
167 if (!stat->m_is_directory)
174 bool extractOK = mz_zip_reader_extract_to_file(mz, i, sFullPath.
toUtf8(), 0);
178 dd <<
"File extraction failed.";
183 ok &= mz_zip_reader_end(mz);
185 mzScopeGuard.dismiss();
192 dd <<
"Unzip error!";
QString & append(QChar ch)
bool exists() const const
QString fromUtf8(const char *str, int size)
QDir absoluteDir() const const
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
QString & replace(int position, int n, QChar after)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString absolutePath() const const
bool mkpath(const QString &dirPath) const const
QByteArray toUtf8() const const