首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用Poco::ZIP压缩/解压缩zip文件

如何使用Poco::ZIP压缩/解压缩zip文件
EN

Stack Overflow用户
提问于 2019-12-27 11:02:34
回答 1查看 588关注 0票数 0

我刚接触C++,尤其是在压缩/解压缩方面。我当前的项目使用的是Poco库,Zip扩展用于将文件/目录压缩或解压缩为Zip文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <Poco/FileStream.h>
#include <Poco/Zip/Decompress.h>
#include <Poco/Zip/Compress.h>
#include <Poco/Timestamp.h>
#include <Poco/File.h>
voidZipFile(string source, string target, List extensions, bool append, bool overWrite)
{
    Poco::DateTime(Timestamp);
    set <string> extensionsSet;
    std::ofstream fos(target, ios::binary);
    Poco::Zip::Compress c(fos, true);

    for (int i = 0; i < extensions.Size(); i++) {
        string ext = std::dynamic_pointer_cast<String>(extensions.operator[](i))->GetPrimitive();
        extensionsSet.insert(ext);
    }
    c.setStoreExtensions(extensionsSet);//set extensions List 

    Poco::File aFile(source);//This is where I start my compress action

    if (aFile.exists())
    {
        Poco::Path p(aFile.path());
        if (aFile.isDirectory())
        {
            if (p.isDirectory()) {
                c.addDirectory(p, Poco::DateTime());
            }
            else {

            }
        }
        else if (aFile.isFile())
        {
            c.addFile(p, p.getFileName());
        }
    }
    else {
        _log.EndMethod();
        throw new FileNotFoundException("File Not Found");
    }


    //Poco::FileOutputStream fos(target, std::ios::binary);

    c.close(); // MUST be done to finalize the Zip file
    fos.close();


}

上面的代码就是我到目前为止所拥有的,我可以将一个文件压缩成一个.zip文件。

如何将文件夹/目录压缩为.zip文件?我不能使用其他库,因为Poco也用于我当前项目的其他部分。

EN

回答 1

Stack Overflow用户

发布于 2019-12-27 11:45:03

您需要添加一种递归方式来搜索文件夹。

这就是我的想法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Poco::File aFile(entry);
        if (!aFile.isDirectory())
            throw ZipException("Not a directory: "+ entry.toString());
        Poco::Path aName(name);
        aName.makeDirectory();
        if (!excludeRoot)
        {
            if (aName.depth() == 0)
            {
                Poco::Path tmp(entry);
                tmp.makeAbsolute(); // eliminate ../
                aName = Poco::Path(tmp[tmp.depth()-1]);
                aName.makeDirectory();
            }

            addDirectory(aName, aFile.getLastModified());
        }
    // iterate over children in the directory
        std::vector<std::string> children;
        aFile.list(children);
        std::vector<std::string>::const_iterator it = children.begin();
        std::vector<std::string>::const_iterator itEnd = children.end();
        for (; it != itEnd; ++it)
        {
            Poco::Path realFile(entry, *it);
            Poco::Path renamedFile(aName, *it);
            Poco::File aFile(realFile);
            if (aFile.isDirectory())
            {
                realFile.makeDirectory();
                renamedFile.makeDirectory();
                addRecursive(realFile, cm, cl, false, renamedFile);
            }
            else
            {
                realFile.makeFile();
                renamedFile.makeFile();
                addFile(realFile, renamedFile, cm, cl);
            }
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59499803

复制
相关文章
Swift入门:闭包
到目前为止,您已经遇到了整数、字符串、双精度数、浮点数、布尔值、数组、字典、结构和类,但是还有另一种类型的数据在Swift中广泛使用,它被称为闭包。这些是复杂的,但它们是如此强大和富有表现力,它们在 Cocoa Touch 广泛使用,所以如果你不了解他们,你不会走得很远。
韦弦zhy
2020/03/19
5490
Swift学习:闭包
本篇将详细总结介绍Swift闭包的用法; 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift中的闭包与C和 Objective-C中的代码块(blocks)以及其他一些编程语言中的匿名函数比较相似。
梧雨北辰
2018/08/09
8610
Swift之闭包
Swift 是一门由Apple 公司开发的用于iOS和OSX设备上的开发语言,吸收了很多现代开发语言的优势。 今天看了官方的关于闭包部分的文档,感觉很不错,记录一下。
EltonZheng
2021/01/26
1.7K0
使用 Swift Package Manager 创建 Swift 包
image.png Using the Package Manager 官网 https://swift.org/getting-started/#using-the-package-manager 进入准备创建 Swift 包文件位置 image.png 创建新的Swift包,首先要创建并输入一个名为的目录 perfect-Qiniu: image.png 进入刚才创建的 perfect-Qiniu 文件
LeeCen
2018/10/11
1.4K0
使用 Swift Package Manager 创建 Swift 包
Swift教程(七)--闭包
闭包是可以在你的代码中被传递和引用的功能性独立模块。Swift 中的闭包和 C 以及 Objective-C 中的 blocks 很像,还有其他语言中的匿名函数也类似。
roc
2019/07/31
7710
Swift系列八 - 闭包
要想使用exec函数,则必须传入两个Int类型的参数和一个返回Int类型的函数,然后exec内部执行了传入的函数。
呆呆
2021/05/27
4300
Swift-闭包(一)
array.sort{(n1:Int,n2:Int) -> Bool in return n1<n2}
Wilbur-L
2021/03/18
4460
swift的闭包结构
函数的设计思路是将有一定功能的代码块包装在一起,通过函数名实现复用。闭包和函数有着类似的作用,然而闭包的设计大多数情况下并不是为了代码的复用,而是传递功能代码块和处理回调结构。 如下代码所示,使用了冒泡排序算法来进行排序操作。 func mySort(array:inout Array<Any>,sortClosure:(Int,Int)->Bool)->Array<Any> { for indexI in array.indices {
用户2554571
2018/07/19
5630
Swift中的闭包(Closures)
闭包是自包含的函数代码块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 lambdas 函数比较相似。
EltonZheng
2021/01/22
2K0
苹果现已支持 Swift 包索引
作者 | Sergio De Simone 译者 | 马可薇 策划 | 丁晓昀 Dave Verwer 和 Sven A. Schmidt 于三年前(2019 年)创建了 Swift 包索引,目的为让 Swift 开发者能够轻松地搜索发现 Swift 包。目前该项目已正式获得苹果的赞助,使其成为 Swift 包相关事宜的官方网站。 顾名思义,Swift 包索引并不是完整的软件包仓库,而是专注于为软件包元数据编制索引,为开发者们在决定项目要使用的软件包时提供其完善的信息。 其所能回答的问题包括:某个
深度学习与Python
2023/04/21
4520
苹果现已支持 Swift 包索引
Swift 基于闭包的类型擦除
与许多其他语言相比,使Swift更加安全,更不易出错的原因之一是其先进的(并且在某种程度上是不容忍的)类型系统。这是一种语言功能,有时可能会给人留下深刻的印象,使您的工作效率提高很多,而有时却令人沮丧。
Swift社区
2021/11/26
1.2K0
【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性
前端修罗场
2023/10/07
1930
Swift 闭包支持隐式 self
在 closure 捕获列表中,如果显式捕获self,则在 closure 使用时,则允许隐式使用self。即在 closure 捕获列表中声明[self], 则 closure 内调用self.的地方都可以不用书写该self.。这个特性在SE-0269中提议。现在本篇提议想把这个特性支持扩展到weak self的捕获上,并允许隐式self和已解包的self一样使用。效果就是如果在 closure 内 self 已经解包,则 closure 内调用 self 的地方可以不用写 self。如下例的dismiss方法调用:
DerekYuYi
2022/11/09
1.4K0
Swift-day4---闭包(Closures)
闭包写在一对大括号中,用 "in"关键字分隔,"in"后的语句是闭包的主体."in"之前的参数和返回值类型是语句组中所使用的参数和返回值格式的一种指示,并不必在语句组中进行逻辑运算和返回.闭包的表达式的运算结果是一种函数类型,可以作为表达式,函数参数和函数返回值
CC老师
2023/03/23
6310
Swift-day4---闭包(Closures)
包资源管理器NPM
NPM全称Node Package Manager,他是node包管理和分发工具。其实我们可以把NPM理解为前端的Maven .
名字是乱打的
2021/12/22
9650
Swift 基于闭包的类型擦除
与许多其他语言相比,使Swift更加安全,更不易出错的原因之一是其先进的(并且在某种程度上是不容忍的)类型系统。这是一种语言功能,有时可能会给人留下深刻的印象,使您的工作效率提高很多,而有时却令人沮丧。
韦弦zhy
2021/06/11
1.1K0
Swift 基于闭包的类型擦除
Swift讲解专题八——闭包 原
        Swift中的闭包是有一定功能的代码块,这十分类似于Objective-C中的block语法。Swift中的闭包语法风格十分简洁,其作用和函数的作用相似。
珲少
2018/08/15
3860
Swift进阶六——函数和闭包
形式参数,指的是是在函数的定义中,系统并没有为其分配内存空间、但是在函数里面可以使用的参数。比如下面的a就是形式参数:
拉维
2021/01/21
1.2K0
Swift3.0 - 函数和闭包
需求: 创建一个接口,输入true 返回 两个数相加的函数,输入false 返回两个数相减的函数
酷走天涯
2018/09/14
1.1K0
Swift3.0 - 函数和闭包
paletteer包:拥有2100多个调色板!
ggplot2是目前主流的绘图R包,有着丰富的扩展包。今天来推荐一个极其强大的配色R包——paletteer包。据R包作者介绍,这个包收集了52个R包的2100种调色板,R用户可以通过paletteer[1]包来直接调用其他R包的调色板。下面来学习下怎么使用这个R包[2]。
庄闪闪
2021/06/25
8.2K0
paletteer包:拥有2100多个调色板!

相似问题

类型标命名

12

类型标重命名类型

12

为命名空间类型标赋值

12

类型标全局命名空间声明

13

webpack的类型标命名空间

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文