不用第三方工具解压zip档案

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

下面的是KeSummer给我的问题的答案,其所说的方法和提供的代码经过验证时可行的,感谢KeSummer的指点。

原帖地址链接:http://topic.csdn.net/u/20090108/16/d5aebfec-b916-449e-ae88-02dd45388804.html#replyachor

原理:zipfldr.dll是个COM组件,但是尚未公开接口,但是我们可以打开一个隐藏的explorer窗口,然后把ZIP的内容悄悄地复制出来,这就相当于解压了。下面是代码,测试例子:UnZipFolder("d://aa.zip","c://解压文件夹");请确保c盘下解压文件夹存在。。。
 

 

bool UnZipFolder(LPCTSTR zipFile,LPCTSTR destination)
   {

    DWORD     strlen
= 0;
    HRESULT     hResult;
    IShellDispatch
*pISD;
    Folder 
*pToFolder = NULL;
    Folder 
*pFromFolder = NULL;
    FolderItems
*pFolderItems = NULL;
    FolderItem
*pItem = NULL;
   
    VARIANT   vDir, vFile, vOpt;
    BSTR  strptr1, strptr2;
    CoInitialize(NULL);
   
   
bool bReturn = false;
   
    hResult
= CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER,
     IID_IShellDispatch, (
void **)&pISD);
   
   
if(FAILED(hResult))
    {
    
return bReturn;
    }
   
    VariantInit(
&vOpt);
    vOpt.vt
= VT_I4;
    vOpt.lVal
= 16+4;     // Do not display a progress dialog box ~ This will not work properly!
   
   
    CString strZipFile(zipFile);
    CString strDestination(destination);
    strptr1
= strZipFile.AllocSysString();
    strptr2
= strDestination.AllocSysString();
   
    VariantInit(
&vFile);
    vFile.vt
= VT_BSTR;
    vFile.bstrVal
= strptr1;
    hResult
= pISD->NameSpace(vFile, &pFromFolder);  
   
    VariantInit(
&vDir);
    vDir.vt
= VT_BSTR;
    vDir.bstrVal
= strptr2;
   
    hResult
= pISD->NameSpace(vDir, &pToFolder);
   
   
if(S_OK == hResult)
    {
     hResult
= pFromFolder->Items(&pFolderItems);
    
if(SUCCEEDED(hResult))
     {
     
long lCount = 0;
      pFolderItems
->get_Count(&lCount);
      IDispatch
* pDispatch = NULL;
      pFolderItems
->QueryInterface(IID_IDispatch,(void**)&pDispatch);
      VARIANT vtDispatch;
      VariantInit(
&vtDispatch);
      vtDispatch.vt
= VT_DISPATCH;
      vtDispatch.pdispVal
= pDispatch;
          
     
//cout << "Extracting files .../n";
      hResult = pToFolder->CopyHere(vtDispatch,vOpt);
     
if(hResult != S_OK) return false;



     
//Cross check and wait until all files are zipped!
      FolderItems* pToFolderItems;
      hResult
= pToFolder->Items(&pToFolderItems);
     
     
if(S_OK == hResult)
      {
      
long lCount2 = 0;  
             
       hResult
= pToFolderItems->get_Count(&lCount2);
      
if(S_OK != hResult)
       {
        pFolderItems
->Release();
        pToFolderItems
->Release();
        SysFreeString(strptr1);
        SysFreeString(strptr2);
        pISD
->Release();
        CoUninitialize();
       
return false;
       }
      
//Use this code in a loop if you want to cross-check the items unzipped.
       /*if(lCount2 != lCount)
       {
        pFolderItems->Release();
        pToFolderItems->Release();
        SysFreeString(strptr1);
        SysFreeString(strptr2);
        pISD->Release();
        CoUninitialize();
        return false;
       }
*/
      
       bReturn
= true;
      }     
     
      pFolderItems
->Release();
      pToFolderItems
->Release();
     }
    
     pToFolder
->Release();
     pFromFolder
->Release();
    }
   
   
//cout << "Over!/n";
    SysFreeString(strptr1);
    SysFreeString(strptr2);
    pISD
->Release();
   
    CoUninitialize();
   
return bReturn;
   }

ubuntu下解压tgz、zip和tar.gz文件 一:ubuntu下解压tgz文件 参数: -c :create 建立压缩档案的参数; -x : 解压缩压缩档案的参数; -z : 是否需要用gzip压缩; -v: 压缩的过程中显示档案; -f: 置顶文档名,在f后面立即接文件名,不能再加参数 举例: 一,将整个/home/www/images 目录下的文件全部打包为 /home/www/images.tar tar -cvf /home/www/images.tar /home/www/images ← 仅打包,不压缩 ta... 阅读详情

相关推荐

Linux中unzip命令解压大文件失败(error:invalid zip file with overlapped components (possible zip bomb))

安装7zip包解决Linux中unzip解压大文件失败的问题。

简简单单的学习笔记,致力于帮助更多前进路上的朋友~ 1万+

IShellDispatch

IShellDispatch CLSID II_SHELLDISPATH2 定义

VC++轻量ZIP模块:带密码保护与批量处理的压缩解压工程源码

一套开箱即用的Visual C++ 6.0 ZIP处理工程,基于CZip/CUnzip封装,支持单文件/多文件压缩与解压,可设置ZIP密码、添加注释、保留目录结构。界面采用标准MFC对话框(zipdlgDlg),无需第三方库,编译后直接运行。核心功能通过czip.h头文件提供简洁API,方便集成到现有VC++桌面项目中。资源目录res包含图标和对话框资源,.dsp/.dsw工程文件完整,配套ReadMe.txt说明基础用法。代码为ANSI编码,兼容Windows XP至Windows 10系统,中间文件(.

juice的博客 183

vb.net 利用.net自带的GZipStream压缩或者解压文件的代码,不需要任何第三方控件

网上很少有用VB写的压缩文件的代码,但是,在网络传输,文件下载,打包发布等等方面的需求又比较多,所以,借鉴了一下C#代码的例子,改造成了VB用的类。另外加上了多层文件夹压缩解压。但是,因为时间有限,只是将文件全部读取到缓存处理,所以,针对大文件没有做特别的处理。例子里面有提示,根据需要自己改动一下吧。

利用Windows命令行解压zip压缩文件(不借助第三方软件)

首先说明一下本文的需求:利用Windows自带的API、DLL或命令行参数等任何手段,解压一个标准的zip压缩文件,并且不借助任何第三方程序。 一、前言——徒劳的探索 为什么会提出这种需求呢?因为我近期在编程中,需要在程序运行时解压一个zip文件,然后使用解压出来的文件。之所以要强调不借助第三方软件,是因为程序发布到客户电脑后,不能指望(或要求)客户电脑里必须有...

VBcom的专栏 3万+

高效提取压缩文件中文档的实用方法与工具实战

在现代数据处理场景中,单一依赖操作系统原生支持的ZIP压缩机制已难以满足复杂多样的归档需求。面对企业级备份、跨平台分发、高压缩比存储以及加密保护等实际应用场景,用户往往需要借助功能更全面、兼容性更强的第三方解压工具。其中,WinRAR和7-Zip作为行业公认的两大主流开源与商业并存的压缩解决方案,不仅提供了对RAR、7Z、TAR、GZIP、BZIP2、ISO等多种格式的深度支持,还通过其底层算法优化和高度可定制的操作界面,显著提升了文件管理效率与安全性。

weixin_42577243的博客 1594

linux解压zip文件

文章目录1. 解压file.zip到指定目录2. 压缩file.zip文件3. 将 tgz 文件解压到指定目录4. 打包5. Linux的压缩/解压缩文件处理 zip & unzip6. zip命令详解7.tar命令详解8. 补充Linux中tar命令详解9. Linux下的压缩文件剖析 1. 解压file.zip到指定目录 unzip diagent-2.2.3002.zip -d xx位置(解压zip到xx位置) $yum install -y unzip zip(安装服务) 2. 压缩fi

craftsman2020的博客 1万+

解压缩命令tar zip rar

文章目录打包和压缩的概念tar常用独立命令打包压缩查阅tar包内有哪些文件解压缩到指定目录(默认是当前目录)只将tar内的部分文件解压出来其他命令(其他)zip和unziprar和unrar 打包和压缩的概念 tar命令可以为linux的文件和目录创建档案 利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件 tar最初被用来在磁带上创建档案,现在...

whaleluo的博客 9万+

iOS Zip文件解压

iOS Zip文件解压 //zip文件解压 数据请求回来拿到 data 使用的解压类库 SSZipArchive NSString *path; NSString *zipPath; NSArray *pathes =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES); //解压过后的存储路径 path= [pathes objectAtIndex:0]; //压缩文件存储的本地路径 zi

Ideainnet 2439

Mac快速解压zip文件的两种方法

ZIP文件格式是一种数据压缩和文档储存的文件格式,通常使用后缀名“.zip”。当前,ZIP格式属于几种主流的压缩格式之一,已得到广泛的使用。Mac OS和流行的Linux操作系统也对ZIP格式提供了类似的支持。因此,如果在网络上传播和分发文件,ZIP格式往往是较为常用的选择。 想要在Mac上快速解压zip文件共有两种办法:第一,使用Mac自带的解压工具——归档实用工具;第二,使用第三方平台提供的Mac解压缩软件,比如说BetterZip。 下面,笔者将结合这两款Mac解压工具分别为大家介绍如何快速解

9834

linux.zip文件怎么解压,linux怎么解压zip文件

ZIP是最广泛使用的归档文件格式,支持无损数据压缩。ZIP文件是包含一个或多个压缩文件或目录的数据容器在此文中将向您展示如何使用unzip命令通过命令行解压缩Linux系统中的文件Unzip命令,可帮助您列出,测试和提取压缩的ZIP归档安装unzip默认情况下,大多数Linux发行版中都没有安装Unzip,但您可以使用发行版的软件包管理器安装它。在Ubuntu和Debian上安装unzipsudo...

weixin_31781061的博客 4714

linux 解压多个zip文件,Linux同时解压多个压缩档案的方法

在Linux系统中Deepin命令行上可以对文件进行解压,使用Deepin命令行还可以同时对多个tarball 文件解压。那么Linux中怎么在Deepin同时解压多个压缩档案呢?$ lsbackup1.tar backup2.tar backup3.tar我们需要一起把它们全部解压,该如何做呢?我们先来简要讲解一下 tar 的用法.tar 命令原用于从磁带设备读写文件(tar 即是 Tape A...

weixin_39930671的博客 2080

如何在Mac中解压7-zip格式?

7-zip,是一款免费且开源的压缩软件,体积轻便小巧。相较其他的软件,7-zip拥有更高的压缩比,同时对比WinRAR而言不会消耗大量资源。 然而,7-zip也是一种压缩文件格式,它的压缩率比普通的zip格式要高出30%-50%,一定程度上提高了压缩率,并且保留了解压时的高速度和低内存需求等优点。 很多用户都喜欢使用7-zip格式,因为它与Windows 资源管理器紧密集成。那么如何在Mac中解压7-zip格式呢? 首先,想要解压7-zip我们就不得不使用第三方平台开发的Mac解压缩软件。因为苹果

3037

使用nodejs优雅的解压zip文件

node-stream-zip库是一款非常棒的zip文件压缩库,使用方便,能解压非标准格式的ZIP文件,经过对比,使用起来比 hzip,unzipper,zip-local等库要方便很多,并且支持同步方法和异步方法。并且和adm-zip一样,支持解压制定文件和目录,adm-zip不能解压非标准的zip文件,例如APK文件。 功能特性 不加载整个文档到内存,内容按块读取 支持大文件 非阻塞读取,没有...

applek_Case的博客 8694

linux下解压zip文件命令

Linux下的压缩解压缩命令详解及实例 实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip ============================ 另:有些服务器没有安装zip包执行不了zip命令,但基本上都可以用tar命令的,实例如下: tar -zcvf /home/zdzlibs.tar.gz /home/zdz/java/zdzlibs/ ============================

manongxianfeng的博客 9万+

Linux命令之解压缩:tar、zip、rar 命令

解压缩是一个常用的操作,在 Linux 中通常比较常用的是 tar 命令,zip 和 rar 命令则是 Windows 中比较常用。

vip_member888的博客 1万+

linux 下解压 zip 文件命令

linux zip命令1、*.tar 用 tar –xvf 解压2、*.gz 用 gzip -d或者gunzip 解压3、.tar.gz和.tgz 用 tar –xzf 解压4、*.bz2 用 bzip2 -d或者用bunzip2 解压5、*.tar.bz2用tar –xjf 解压6、*.Z 用 uncompress 解压7、*.tar.Z 用tar –xZf 解压8、*.rar 用 unrar e解压9、*.zip 用 unzip 解压Linux中tar命令详解(转载的资料)

一夜飘零 2万+
上一篇: MMU
下一篇: 服务启动过程
danxuezx
博客等级 码龄18年 299粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

danxuezx

如果对你有用是我的快乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值