通过引用一DLL(ICSharpCode.dll)可以实现所述功能。。。

一、压缩文件

using System;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Checksums;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using System.Collections;

namespace wsUpFiles
{
 /// <summary>
 /// Common 的摘要说明。
 /// </summary>
 public class Common
 {
  public Common()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

/// <summary>
  /// 压缩文件
  /// </summary>
  /// <param name="sourceFileNames">压缩文件名称集合</param>
  /// <param name="destFileName">压缩后文件名称</param>
  /// <param name="password">密码</param>
  public static void zipFile(string path,string destFileName)
  {
   Crc32 crc = new Crc32();
   ZipOutputStream s = new ZipOutputStream(File.Create(destFileName));
   s.Password="";
   s.SetLevel(6); // 0 - store only to 9 - means best compression
   //定义
   System.IO.DirectoryInfo myDir = new DirectoryInfo(path);
   if(myDir.Exists == true)
   {
    System.IO.FileInfo[] myFileAry = myDir.GetFiles();
    
    //循环提取文件夹下每一个文件,提取信息,
    foreach (FileInfo objFiles in myFileAry)
    {
     FileStream fs = File.OpenRead(objFiles.FullName);
     byte[] buffer = new byte[fs.Length];
     fs.Read(buffer, 0, buffer.Length);
     ZipEntry entry = new ZipEntry(objFiles.FullName);
     entry.DateTime = DateTime.Now;
     entry.Size = fs.Length;
     fs.Close();
     crc.Reset();
     crc.Update(buffer);
     entry.Crc  = crc.Value;
     s.PutNextEntry(entry);
     s.Write(buffer, 0, buffer.Length);           
    }   
    s.Finish();
    s.Close();
   }
  }
  
 }
}

要对压缩文件加密时,要s.Password = "aaa"; aaa为密码。

二、解压文件

/// <summary>
  /// 解压文件
  /// </summary>
  /// <param name="sourceFileName">被解压文件名称</param>
  /// <param name="destPath">解压后文件目录</param>
  /// <param name="password">密码</param>
  public static void unzipFile(string sourceFileName,string destPath,string fileType)
  {
   ZipInputStream s = new ZipInputStream(File.OpenRead(sourceFileName));
   ZipEntry theEntry;
   ArrayList al=new ArrayList();

while ((theEntry = s.GetNextEntry()) != null)
   {   
    string fileName=Path.GetFileName(theEntry.Name);
    if(fileName!="")
    {
     fileName=destPath+"\\"+fileName;
     if(!Directory.Exists(destPath))
     {
      Directory.CreateDirectory(destPath);
     }
     FileStream streamWriter = File.Create(fileName);     
     int size = 2048;
     byte[] data = new byte[2048];
     s.Password="";
     while (true)
     {
      size = s.Read(data, 0, data.Length);
      if (size > 0)
      {
       streamWriter.Write(data, 0, size);
      }
      else
      {
       break;
      }
     }
     streamWriter.Close();
    }

}
   s.Close();
   
  }

注意:程序的压缩过的文件,要通过系统上的工具解压出来的路径会相当多,因其在压缩时保留了原来的绝对路径,但压缩的文件中只包含所压缩的目标文件,当用程序解压出来的文件是相对的文件路径。

转:http://blog.csdn.net/jinru2560/archive/2006/01/12/577493.aspx

转载于:https://www.cnblogs.com/hzuIT/articles/763460.html

通过C#代码 压缩/解压文件相关推荐

  1. java代码实现解压文件_Java压缩/解压文件的实现代码

    用java压缩/解压文件: import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; impo ...

  2. 测试掌握的Linux解压,轻松掌握Linux压缩/解压文件的方法

    对于在Linux下解压大型的*.zip文件,相信大家一般都会通过使用winrar直接在smb中来进行解压的操作,虽然说最终可能能够解压但有时候会存在解压时间长或者网络原因出错等故障的情况出现.那么有没 ...

  3. 命令行下(bat)使用 Lhaplus 自动 压缩 解压文件 (含参数设定说明)

    命令行下(bat)使用 Lhaplus 自动 压缩 解压文件,参数设定 https://mp.csdn.net/console/editor/html/104400832 ■前言 准备测试数据,要压缩 ...

  4. WinRAR压缩解压文件

    使用WinRAR压缩管理器压缩解压文件详细步骤如下: ■ 压缩文件 ① 鼠标右键需要压缩的文件,点击"添加到压缩文件",具体操作步骤如图所示: ② 压缩后的对应文件压缩包会显示在桌 ...

  5. zip包怎么解压oracle,使用jar与zip压缩解压文件的区别

    使用jar命令压缩和解压文件不会继承原来的权限,切记! 而使用zip/unzip压缩解压文件则会保留文件原来的权限等信息,因此使用压缩解压的时候尽量使用专业的工具 下面是测试内容和结果: 1.首先确认 ...

  6. android zip解压出错,常见的压缩解压文件出错解决办法

    您是否遇到过精力了好久下回来的压缩吧,结果在解压过程中出现错误的情况呢?比如说此解压失败或压缩文件文件已经损坏?导致解压文件失败.如果遇到这种问题,那就试试常见的压缩解压文件出错解决办法吧.凡事求人不 ...

  7. tar多线程压缩解压文件

    tar多线程压缩解压文件 tar -czvf a.tar.gz ./* 测试每分钟压缩包a.tar.gz增长大约300M 安装多线程程序 yum -y install pigz 实测,4核的机器,2G ...

  8. Java代码实现解压文件包和压缩文件的工具类

    最近开发任务比较多,这两天陆陆续续整理了一点资料上传一下,这个是前段时间用到的解压和压缩文件的工具类,网上找了一些,自己补充一下,现在先分享一下,希望对各位同学有所帮助! package com.as ...

  9. Node rar压缩/解压文件

    暂时未发现node有好用的rar解压/压缩库,所以就自己搜索了一下,简单写了一个,并做了个简单的封装. rar文件的压缩/解压是通过命令行来完成的,所以就需要node 的child_process库, ...

最新文章

  1. 获取DOM节点的几种方式
  2. 网站发送邮件的邮箱服务器,教各位站长配置邮箱让网站能够发送Email邮件
  3. 这些HTML、CSS知识点,面试和平时开发都需要 No10-No11
  4. Qt pro使用sql之类的需要添加的模块
  5. oracle:主键,外键
  6. pcb入门之原理图的绘制
  7. go数组去除重复_让我们一起啃算法----删除排序链表中的重复元素
  8. Python 命令pip install pygame安装报错
  9. 【STM32】FreeRTOS资源(持续更新)
  10. c语言readline库6,readline-6.3 之arm平台交叉编译
  11. java方法参数类型不确定_一个Java方法能有多少个参数类型?这个好奇coder做了个实验...
  12. hbase 导入mysql_HBase导入SQL Server数据库数据
  13. 所有主流浏览器都支持HTML的视频格式5,所有主流浏览器都支持HTML 5吗?
  14. 安卓10可用的性能监视器_iPad 秒变监视器,无线图传设备真的有用吗?
  15. vCenter HA (至少VCSA6.5及以上)
  16. jquery UI 框架
  17. 258. Move 0s To The End I -- Laicode
  18. IP属地信息哪里来的?手把手教你实现通过IP查询属地信息
  19. 阿里云ECS实例邮件发送不了的解决办法
  20. 粒子群算法及C++实现

热门文章

  1. [转载]datatable中只取前7条数据
  2. 薛XX后代的IQ CSU1597【循环节】或【快速幂】
  3. 设计师不应该错过的响应式设计框架(含优缺点分析)
  4. 女皇万岁!我们是来送礼的 ——阿里聚安全春天系列全套大礼包
  5. 【知识积累】随机数生成的几种方法
  6. 记一次TIME_WAIT网络故障
  7. Android进阶:七、Retrofit2.0原理解析之最简流程【上】
  8. JDK1.8源码(三)——java.lang.String 类
  9. 工业云计算在中国工业领域的发展与应用趋势
  10. 【Linux】Linux基本命令扫盲【转】