После успешного сжатия папки, вот моя ситуация:
Если append = true
и overWrite = false
Я должен проверить, существует ли целевой zip-файл или нет, если он существует, я проверю существующий zip-файл какие файлы в нем отсутствуют, и добавьте в него новый файл из исходной папки.
Мой вопрос:
- Как мне открыть zip-файл и поместить его в сжатый файл? объект? или какую другую библиотеку в Poco я должен использовать, чтобы открыть поток zip? Я пытаюсь использовать
std::ifstream
, но Poco :: zip :: Compress, похоже, не получает std::ifstream
Я, конечно, должен изменить сам исходный код Poco, чтобы он соответствовал моему требование. Заранее спасибо.
void ZipFile(string source, string target, List extensions, bool append, bool overWrite)
{
Poco::File tempFile(source);
if (tempFile.exists())
{
if (Poco::File(target).exists() && append && !overWrite) {
fs::path targetPath = fs::path(target);
std::ifstream targetFileStream(targetPath.string(), std::ios::binary);
std::ofstream outStream(target, ios::binary);
CompressEx compress(outStream, false, false);
if (tempFile.isDirectory())
{
Poco::Path sourceDir(source);
sourceDir.makeDirectory();
compress.addRecursive(sourceDir, Poco::Zip::ZipCommon::CompressionMethod::CM_AUTO,
Poco::Zip::ZipCommon::CL_NORMAL, false);
}
else if (tempFile.isFile())
{
Poco::Path path(tempFile.path());
compress.addFile(path, path.getFileName(), Poco::Zip::ZipCommon::CompressionMethod::CM_AUTO,
Poco::Zip::ZipCommon::CL_NORMAL);
}
compress.close(); // MUST be done to finalize the Zip file
outStream.close();
}
}