精华内容
下载资源
问答
  • Linux C语言 Zlib 实现解压zip文件

    千次阅读 2020-11-11 19:33:44
    在网上一通以后,发现教程千篇一律,要么是打着解压文件的标题解压buff内容,要么是c++完成的。好不容易有两篇C语言解压缩文件的,结果并不能用。 最后还是只能看英文文档,终于找到案例了。下面记录如何实现的,...

    Linux C语言 Zlib 实现解压zip文件

    因为在做嵌入式Linux,做OTA功能的时候需要解压zip升级包。所以需要用到zip文件的解压缩功能。

    就想着能不能用zlib来完成这个功能。在网上一通找以后,发现教程千篇一律,要么是打着解压文件的标题解压buff内容,要么是c++完成的。好不容易有两篇C语言解压zip文件的,结果并不能用。

    最后还是只能看英文文档,终于找到案例了。下面记录如何实现的,其实还是非常的简单,例程写得比较复杂,我只用到一个解压功能,我只修改了一点代码,没有太大改动。有需要的话,可以再进行精简。上流程:

    1. 安装zlib库

    下载zlib。下载zlib source code,官网能直接下载,也可以去github上下载。

    解压编译安装zlib。

    $ tar -xzvf zlib-1.2.11.tar.gz
    $ cd zlib-1.2.11
    $ ./configure
    $ make
    $ sudo make install
    
    $ pkg-config zlib --libs --cflags
    >> -I/usr/local/include  -L/usr/local/lib –lz
    

    安装成功。

    2. 使用minizip

    上面的源码目录contrib\minizip即为minizip,是zipunzip功能最小化实现。

    打开Makefile文件,我们可以看到,这个目录下最终编译出来两个工具,一个是miniunz,一个是minizip。一个是zip的解压缩工具,一个文件的zip压缩工具。

    CC=cc
    CFLAGS=-O -I../..
    
    UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
    ZIP_OBJS = minizip.o zip.o   ioapi.o ../../libz.a
    
    .c.o:
    	$(CC) -c $(CFLAGS) $*.c
    
    all: miniunz minizip
    
    miniunz:  $(UNZ_OBJS)
    	$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)
    
    minizip:  $(ZIP_OBJS)
    	$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
    
    test:	miniunz minizip
    	./minizip test readme.txt
    	./miniunz -l test.zip
    	mv readme.txt readme.old
    	./miniunz test.zip
    
    clean:
    	/bin/rm -f *.o *~ minizip miniunz
    

    接下来对这个目录进行编译。

    $ ./configure
    $ make clean
    $ make
    

    经过编译,目录下能得到上面的两个工具。我们根据Makefile中的test的使用方法对两个工具进行使用。

    $ echo "hello world!" > test.txt
    $ ./minizip test.zip test.txt
    # 可以看到一个目录下生成了test.zip
    $ ./miniunz -l test.zip
    # 可以看到压缩包的各种信息。打包压缩比,里面包含的文件等。
    $ rm -r test.txt
    $ ./miniunz test.zip
    $ ls
    # 好了,解压后,目录下的test.txt又出现了。
    

    在这里插入图片描述
    这里我们试一下用zip工具压缩test.txt,看看miniunz是否能够解压成功。

    $ sudo apt install zip
    $ rm test.zip
    $ zip -o test.zip test.txt
    $ ./miniunz test.zip
    

    OK! 实践证明,代码是有没有问题。

    这里解释一下,加-l参数是只读取信息,不提取文件。
    不加参数就是提取文件。压缩包里有多少文件就提取多少文件。可以通过在提供一个参数名,即压缩包内文件的文件名,可以直接只提取到对应的文件,如 ./miniunz test.zip test.txt。加-d path可以指定提取文件的输出路径。

    这些参数的用法可以打开miniunz.c进行查看。
    如此完善的解压功能,代码本身可以直接拿来用,不过稍微有点臃肿,可以自己进行删减。

    3. 修改miniunz.c

    从上面的Makefile可以看出,编译我们需要的功能仅仅只需要gcc -O -I../.. -o miniunz miniunz.c unzip.o ioapi.o ../../libz.a。即只需要unzip.cioapi.c文件,以及我们的自己的解压代码,还有zlib库。

    这里我们需要修改miniunz.c,事实上,这个文件里面的api基本上能直接拿来用。因为我只需要解压缩文件,并且我要解压的压缩包内只有一个文件,所以,我修改了一些代码。

    $ touch demoUnzip.c
    

    把需要的内容从miniunz.c复制到我们的文件中。这里我把main()改成了下面的代码,仅仅只保留解压缩一个文件的功能。

    $ gcc -O -I../.. -o demoUnzip demoUnzip.c unzip.o ioapi.o ../../libz.a
    

    运行验证,结果完美。☺☺☺

    在这里插入图片描述

    int ch_unzip_file(char *zipFileName, char *srcPath, char *obFileName, char *obPath)
    {
        if (zipFileName == NULL || obFileName == NULL)
        {
            return -1;
        }
    
        unzFile uf = NULL;
        char filename_try[MAXFILENAME + 16] = "";
        int opt_do_extract_withoutpath = 0;
        int opt_overwrite = 0;
        int ret_value = 0;
        const char *password = NULL;
        char zipFile[64] = {0};
        strcat(zipFile, srcPath);
        strcat(zipFile, zipFileName);
    
    #ifdef USEWIN32IOAPI
        zlib_filefunc64_def ffunc;
    #endif
    
        strncpy(filename_try, zipFile, MAXFILENAME - 1);
        /* strncpy doesnt append the trailing NULL, of the string is too long. */
        filename_try[MAXFILENAME] = '\0';
    
    #ifdef USEWIN32IOAPI
        fill_win32_filefunc64A(&ffunc);
        uf = unzOpen2_64(zipFile, &ffunc);
    #else
        uf = unzOpen64(zipFile);
    #endif
        if (uf == NULL)
        {
            strcat(filename_try, ".zip");
    #ifdef USEWIN32IOAPI
            uf = unzOpen2_64(filename_try, &ffunc);
    #else
            uf = unzOpen64(filename_try);
    #endif
        }
    
        if (uf == NULL)
        {
            printf("Cannot open %s or %s.zip\n", zipFile, zipFile);
            return 1;
        }
        printf("%s opened\n", filename_try);
    
        ret_value = do_extract_onefile(uf, obFileName, opt_do_extract_withoutpath, opt_overwrite, password);
    
        unzClose(uf);
    
        return ret_value;
    }
    
    int main(int argc, char *argv[])
    {
    
        ch_unzip_file(argv[1], "", argv[2], "");
    
        return 0;
    }
    
    
    展开全文
  • paddlepaddle 如何解压zip文件

    千次阅读 2019-06-06 20:00:51
    使用AIstudio的paddlepaddle做神经网络的题目,要使用自己的数据集,把image.zip上传上去,之后需要解压 使用命令unzip会出错如下: 之后解决办法,在...

    使用AIstudio的paddlepaddle做神经网络的题目,要使用自己的数据集,把image.zip上传上去,之后需要解压

    使用命令unzip会出错如下:

    之后找解决办法,在https://jingyan.baidu.com/article/c275f6ba714393e33d7567b3.html找到

    代码如下:

    import os
    import zipfile
    os.chdir('/home/aistudio/data/data2394')
    extracting = zipfile.ZipFile('images.zip')
    extracting.extractall()

    正确解压!!!

    展开全文
  • 在python中解压rar文件

    万次阅读 2016-08-30 10:32:20
    第三步: 终于可以开始解压了,命令十分简单 ...file = rarfile.RarFile('file_name') #这里写入的是需要解压文件,别忘了加路径 file.extractall('you_want_path') #这里写入的是你想要解压到的文件夹
     
    

    首先说一下我的系统和python版本信息:

    win7、python2.7.12

    我找了两篇个人认为比较好的文章:

        第一篇http://blog.csdn.net/luoye7422/article/details/41873499,按照他的方法来确实连报错都是一样的,但是不幸的是即使将C:\Program Files\WinRAR目录下的UnRAR.exe复制到脚本文件夹下面或者将该目录添加到环境变量中依然报这个错,所以。。。只能放弃,如果有小伙伴按照这个方法来能够实现那最好了。(事实上这种方法的本质是封装了一个popen函数,就是调用了cmd命令窗口来进行解压,所以又兴趣的同学可以直接去找python调用cmd的方法,然后自己写一个解压函数就ok!)

        第二篇http://blog.csdn.net/q1w2e3r4470/article/details/51859467,操作比第一篇略复杂一点(但也只是相对,事实上我觉得作者只是没有讲清楚,我结合我所查阅的资料对其进行重新整理了一下)

    进入正题

    第一步

    安装unrar模块 pip install unrar(怎么用pip就不解释了)

    然后尝试在IDE中(我用的是pycharm)输入 from unrar import rarfile并运行,会显示报错:

    LookupError: Couldn't find path to unrar library.

    意思是找不到 unrar library的路径,这里我们就需要去下载这个unrar library,事实上它就是UnRAR.dll这个东西,下载网址:http://www.rarlab.com/rar/UnRARDLL.exe 或者去http://www.rarlab.com/rar_add.htm找到UnRAR.dll下载,在lunix下应该需要自己编译。

    第二步:

    安装完后我电脑中的路径为C:\Program Files (x86)\UnrarDLL,win7 32位的朋友可以将它添加到环境变量中,64位的将其中的X64文件夹设置为环境变量,因为unrar模块识别的文件是unrar.dll和unrar.lib,所以将文件夹中的UnRAR.dll和UnRAR.lib用小写重命名。

    好了,重新尝试 from unrar import rarfile并运行,就成功了!(事实上我还是报错,我把pycharm重新关了之后再启动就好了,可能是pycharm的更新有延迟)

    第三步:

    终于可以开始解压了,命令十分简单

    from unrar import rarfile
    file = rarfile.RarFile('file_name')  #这里写入的是需要解压的文件,别忘了加路径
    file.extractall('you_want_path')  #这里写入的是你想要解压到的文件夹

    去你指定的文件夹下看看它在不在吧!

    如果你还想了解其他关于unrar的函数,可以去这里:https://github.com/matiasb/python-unrar

    查看下面的example就可以了!

    展开全文
  • 一,tar解压造成目录权限发生变更解决 一个比较有趣的现象: 在做集群管理的时候偶尔会发现目录权限出现被更改,没人去操作怎么目录属性自己就变了?...我们进行解压文件会发现这个情况:解压出来的...

    转自:https://blog.csdn.net/zhangzhikaixinya/article/details/45815065

    一,tar解压造成目录权限发生变更解决


    一个比较有趣的现象:
    在做集群管理的时候偶尔会发现目录权限出现被更改,没人去操作怎么目录属性自己就变了?


    首先来做个测试,找出问题原因:
    可以看到当前目录和压缩文件所属都是root


    我们进行解压文件会发现这个情况:


    解压出来的文件和当前目录权限都变了,其实503和505就是进行文件压缩所在机器,进行操作的user id 和 group id

    其实这个和解压参数有关系:
    使用 tar --no-same-owner -zxf 指定 --no-same-owner可以解决这个问题:




    从图中可以看到,指定--no-same-owner,目录权限会使用当前操作用户的权限作为文件的所属
     

    tar命令在解压时会默认指定参数--same-owner,所以以后解压文件一定要注意这个情况呀

     


    转自:https://www.cnblogs.com/min-dust/p/9302166.html

    Question:

      最近在用shell编写软件包的一键部署时发现一个有趣的现象:软件安装包中包含一些第三方的压缩包,这些压缩包本身的用户组权限为root,但解压后的目录的所有者权限却变更为1001,如果这时候用groupadd和useradd命令分别添加用户组和用户为test,会发现解压后的目录的所有者权限会变更为新添加的test。(环境:CentOS7-1708)

     

    Answer:

      经过查找资料发现,tar命令在解压时会默认指定参数--same-owner,即打包的时候是谁的,解压后就给谁;

      如果在解压时指定参数--no-same-owner(即tar --no-same-owner -zxvf xxxx.tar.gz),则会将执行该tar命令的用户作为解压后的文件目录的所有者。

      解压时添加--no-same-owner参数后该上述问题解决,但为什么当目录的所有者权限变更为1001后执行groupadd和useradd命令会更改目录所有者权限为新添加的用户,还没想明白,希望知道的朋友能指点迷津。先在此谢过啦~

    展开全文
  • VC++ 6.0不到文件

    千次阅读 2018-09-24 16:38:34
    自己在做MFC双缓冲的时候,程序报错并跳出以下提示框 错误:由于不到MFC42D.DLL,无法继续执行代码。重新安装可能会解决此问题。 错误:由于不到MFCO42D.DLL,无法继续执行代码。重新安装可能会解决此...
  • 一般linux放出来的压缩包都是tar格式的,但是我们自己在压缩一些本地文件的时候,多数都是用的rar格式。那么这个我们上传到linux的服务器上面,就不能直接用命令解压了。因为linux默认是不支持的rar格式解压的,所以...
  • UE4打包封装成一个自解压文件

    千次阅读 2018-06-01 17:37:13
    下面是利用winrar为UE4打包程序制作一个自解压文件包,目的就是起到文件整理和一键安装的效果准备好要制作自解压的相关文件附加一个删除自解压文件本身的批处理,代码如下:@echo off ping 127.0.0.1 -n 1 >...
  • java中一些场合我们需要,对上传的压缩包中的内容进行处理,这个时候就用到了解压操作,还有压缩的操作等等,这里直接贴一下代码,以备今后自己可能会用到,还有共享给需要的小伙伴们。import java.io....
  • Linux总结

    千次阅读 多人点赞 2020-01-14 20:36:45
    一 、从认识操作系统开始 1.1 操作系统简介 1.2 操作系统简单分类 二 、初探Linux 2.1 Linux简介 2.2 Linux诞生简介 2.3 Linux的分类 ...三 、Linux文件系统概览 ...3.1 Linux文件系统简介...4.3 文件的操作命令(增删...
  • "解压文件的当前路径为:{}" , outPath); OutputStream out = new FileOutputStream(outPath); IOUtils.copy(in, out); in.close(); out.close(); } zip.close(); LOG.info( "******************解压完毕***...
  • 基于哈夫曼编码的文件压缩解压

    千次阅读 多人点赞 2016-05-31 14:51:40
    这个程序是研一上学期的课程大作业。当时,跨专业的我只有一点 C 语言和数据结构基础,为此,我查阅了不少资料,再加上自己的思考和分析,实现后不断调试、测试和完善,耗时一...名称:基于哈夫曼编码的文件压缩解压
  • tar如何解压文件到指定的目录?   tar czvf mysql.tar.gz /var/lib/mysql 压缩的文件,我想解压到当前目录下,而不是绝对路径下,该如何解压? tar cxvf mysql.tar.gz  的话,会覆盖  /var/lib/mysql  下全部...
  • 很多萌新不会用百度云和手机打开压缩包文件。直接在百度云里面点开了在线的压缩包,这样一是要钱,二是会让资源失效,不推荐。...但是百度云的压缩包文件,由于很多手机是没有自带解压软件,很多人不会操作。所以在...
  • #不设置延时会导致还没有解压完,就开始去找文件,导致找到文件错误 time.sleep(1) path1 = glob.glob(unzip + '\**',recursive=True) #print (path1) file_att_list.append(path1) elif os.path.splitext...
  • [manjaro] unzip-icon解决解压zip文件乱码

    千次阅读 2018-09-28 08:43:23
     网上说解压zip文件用unzip命令.然后我的没有unzip.就安装了一个.开始解压.解压成功.但是乱码...恶心.开始查资料.  说解压的时候用-O指定解压的编码即可..好.开始动工.但是unzip竟然没有-O参数.有个小写的o.但是...
  • vscode安装使用教程

    万次阅读 多人点赞 2018-12-11 19:18:48
    可下载.zip解压版,下载解压后即可使用。【其是用electron打包的】 也可下载安装版可执行程序,安装后很多东西都不需要你自己配置了。 四、汉化vscode 按f1 搜索 Configore Display Language 设置 zh-cn 关闭...
  • 起初测试环境在WINDOWS平台中,测试通过,换到 LINUX+nginx 的环境中时 就出问题了(ZIP包中有文件和文件夹一共3百多个文件,大部分是带汉字的文件名),问题的现象是:不带汉字的文件解压没有问题,另外有部分带...
  • 计算机二级考试之Office2010

    万次阅读 多人点赞 2019-09-10 08:28:00
    我这里选择默认的C盘,点击立即安装(你自己选择安装目录的时候最好不要含有中文,可以这样填写如 E:\Microsoft Office 6、软件正在安装中,耐心等一会 7、安装完成,点击关闭 8、打开解压之后的软件安装包文件夹,...
  • C++ Huffman树实现文件的压缩与解压

    千次阅读 2019-02-23 19:25:22
    Huffman树在数据结构的时候都了解过,由Huffman树可以生成huffman编码,而Huffman编码在解决文件压缩问题的时候还是一个比较经典的算法。 Huffman树 ? 定义:Huffman树,又称最优二叉树,是加权路径长度最短的...
  • c# 解压 处理.tar.gz文件

    千次阅读 2016-11-16 17:57:33
    首先 tar是把文件打成一个包,并不压缩;...先 在ICSharpCode.SharpZipLib.GZip 中的方法解压为tar文件包, ///////////  var targzpath="xxx/xxx/xxx.tar.gz";  GZipInputStream gzs = new GZipInp
  • 常见的压缩包格式有两种:zip和rar,而我们手机qq上自带的解压软件目前只支持zip,而rar是有专利的,不会集成在任何系统上,这就需要我们去下载第三方软件来解压。 比如下载qq浏览器等的一些浏览器,这些浏览器会...
  • DoNetZip也是挺坑的,某些zip解压缩不了, 异常返回“Ionic.Zip.ZipException: Cannot read that as a ZipFile”, ...所以自己写了一下 从一个zip里取一个文本文件,我是后面转的文本,可以改为直接使用Stream。d
  • 在C盘搜索 .ini文件,如果找到文件类型为配置设置的文件 复制到 Mysql文件夹下 修改文件名为 my.ini 完成
  • 之前在网上找解压zip和rar的代码 多多少少有些问题,不是中文乱码就是解压多级菜单会报错,然后自己写了两个,目前还没遇到bug
  • 在Github下载一个Chrome插件,解压后在Chrome浏览器“加载已解压的扩展程序”总是报错如图 其实很简单,只不过在当前文件夹下没有manifest.json文件,加载包含manifest.json文件的文件夹就行了。 简单问题也许很...
  • 服务器搭建个人网站(阿里云服务器)

    万次阅读 多人点赞 2018-01-29 16:47:32
    服务器搭建个人网站 一丶购买服务器 ...阿里云提供了几种服务器,云服务器ESC、轻量应用服务器,ESC更好一点儿,我选了轻量级应用服务器。购买好了之后,在阿里云网站主页→...首先你要知道怎么把你本机的文件放到你的
  • ubuntu下opencv3和opencv2共存

    千次阅读 2017-05-04 15:43:05
    在之前的安装中,电脑默认安装的opencv2.4.8,当我们 FIND_PACKAGE( OpenCV REQUIRED ) 时,系统默认在/usr/share/OpenCV下OpenCVConfig.cmake,确定引入的Opencv的头文件和库文件的位置。 高博在他的书中,...
  • 不仅是tomcat配置环境的方法,同时也能解决,下载tomcat版本,解压后,bin目录下,没有startup.bat文件 可以直接在Win+r,输入cmd,进入DOS窗口后,输入startup,即可打开tomcat tomcat版本下载路径,点击下载 下面...
  • 用7za解压文件失败的原因分析

    千次阅读 2013-10-16 10:43:17
    一般传输文件会都用到7za这个命令,有时明明打包好了,传过去就是解压失败,以下是博主的一些解决经验,其实主要是供自己以后参考的: 1.确认打包的时候everything is ok 2.传输过程无误:  A.大小一致  B.用...
  • 01.Win10修改用户名及user文件名称的一波三折

    万次阅读 热门讨论 2018-03-05 04:31:40
    在初次安装Win10的时候,一时手欠,把自己的中文名字作为用户名登录了,而且字还打错了,导致user文件夹的名字也跟随了这个蛋疼的名字。而即使是在把帐户名和计算机描述都修改后,user文件夹的名字仍然维持初次登录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,953
精华内容 45,581
关键字:

怎么找自己解压的文件