C++ 使用Poco/zip库解压缩.zip文件

C++ 使用Poco/zip库解压缩.zip文件,c++,poco-libraries,C++,Poco Libraries,在成功压缩(使用Poco lib)之后,我发现我可以解压缩一个包含文件但不包含子文件夹的.zip文件 我的解压缩代码块: struct UnzipStruct unzipObject; unzipObject.unzip(source, target); 这是MyUnzipStruct: struct UnzipStruct { void unzip(std::string source, std::string target) { fs::path sourcePat

在成功压缩(使用Poco lib)之后,我发现我可以解压缩一个包含文件但不包含子文件夹的.zip文件

我的解压缩代码块:

struct UnzipStruct unzipObject;
unzipObject.unzip(source, target);
这是MyUnzipStruct:

struct UnzipStruct
{
    void unzip(std::string source, std::string target) {
        fs::path sourcePath = fs::path(source);
        std::ifstream inp(sourcePath.string(), ios::binary);
        fs::path targetPath = fs::path(target);
        Poco::Path targetDir(targetPath.string());
        Poco::Zip::Decompress dec(inp, targetDir, false, true);
        // if an error happens invoke the ZipHandlingLib::onDecompressError method
        dec.EError += Poco::Delegate<UnzipStruct, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string>>(this, &UnzipStruct::onDecompressError);
        dec.decompressAllFiles();
        dec.EError -= Poco::Delegate<UnzipStruct, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string>>(this, &UnzipStruct::onDecompressError);
        inp.close();
    }

    void onDecompressError(const void* pSender, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string>& info)
    {
        std::cerr << info.second << "\n";
    }
} unzipObject;
struct解压结构
{
void解压(std::string源,std::string目标){
fs::path sourcePath=fs::path(源);
std::ifstream inp(sourcePath.string(),ios::binary);
fs::path targetPath=fs::path(目标);
路径targetDir(targetPath.string());
解压dec(inp,targetDir,false,true);
//如果发生错误,请调用ZipHandlingLib::onDecompressError方法
dec.EError+=Poco::Delegate(this,&UnzipStruct::ondecompressorr);
dec.解压缩所有文件();
dec.EError-=Poco::Delegate(this,&UnzipStruct::ondecompressorr);
inp.close();
}
void ondecompressorr(const void*pSender,std::pair&info)
{

看看这个例子,如何为
dec.EError
@S.M.设置一个错误处理程序。我在
Ziptest
附近遇到了一些错误,你知道应该包含哪个文件,或者需要实现哪些方法来修复它吗?
Ziptest
只是一个测试类名,你应该实现类
Ziptest
(或者其他名称)使用压缩错误(或其他名称)的方法并将类的对象和指向方法的指针传递给
poco::Delegate
构造函数。@S.M.是的,我刚刚编辑了我的帖子,我已经完成了,但仍然无法提取zip文件。我认为最好在poco bug tracker上报告这个问题看看如何为
dec.EError
@S.M设置错误处理程序的示例。我刚刚在
Ziptest
附近遇到错误,您知道要包含哪个文件或需要实现哪些方法来修复它吗?
Ziptest
只是一个测试类名,您应该使用方法
onDecompressError
(或其他名称)实现类
Ziptest
(或其他名称)并将类的对象和指向方法的指针传递给
poco::Delegate
构造函数。@S.M.是的,我刚刚编辑了我的帖子,我已经完成了,但仍然无法提取zip文件。我认为最好在poco bug tracker上报告这个问题