C#实现文件压缩与解压的方法示例【ZIP格式】

发布时间 - 2026-01-11 01:50:29    点击率:

本文实例讲述了C#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下:

在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择。

组件的使用比较简单,请参照下面的代码。点击下载项目源码

/*
 * Gary Zhang -- cbcye@live.com
 * www.cbcye.com
 * www.quicklearn.cn
 * cbcye.cnblogs.com
 */
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using System.Diagnostics;
using ICSharpCode.SharpZipLib.Core;
namespace TestConsole
{
  class Program
  {
    static void Main()
    {
      //CreateZipFile(@"d:\", @"d:\a.zip");
      UnZipFile(@"d:\a.zip");
      Console.Read();
    }
    private static void CreateZipFile(string filesPath, string zipFilePath)
    {
      if (!Directory.Exists(filesPath))
      {
        Console.WriteLine("Cannot find directory '{0}'", filesPath);
        return;
      }
      try
      {
        string[] filenames = Directory.GetFiles(filesPath);
        using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
        {
          s.SetLevel(9); // 压缩级别 0-9
          //s.Password = "123"; //Zip压缩文件密码
          byte[] buffer = new byte[4096]; //缓冲区大小
          foreach (string file in filenames)
          {
            ZipEntry entry = new ZipEntry(Path.GetFileName(file));
            entry.DateTime = DateTime.Now;
            s.PutNextEntry(entry);
            using (FileStream fs = File.OpenRead(file))
            {
              int sourceBytes;
              do
              {
                sourceBytes = fs.Read(buffer, 0, buffer.Length);
                s.Write(buffer, 0, sourceBytes);
              } while (sourceBytes > 0);
            }
          }
          s.Finish();
          s.Close();
        }
      }
      catch (Exception ex)
      {
        Console.WriteLine("Exception during processing {0}", ex);
      }
    }
    private static void UnZipFile( string zipFilePath)
    {
      if (!File.Exists(zipFilePath))
      {
        Console.WriteLine("Cannot find file '{0}'", zipFilePath);
        return;
      }
      using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
      {
        ZipEntry theEntry;
        while ((theEntry = s.GetNextEntry()) != null)
        {
          Console.WriteLine(theEntry.Name);
          string directoryName = Path.GetDirectoryName(theEntry.Name);
          string fileName = Path.GetFileName(theEntry.Name);
          // create directory
          if (directoryName.Length > 0)
          {
            Directory.CreateDirectory(directoryName);
          }
          if (fileName != String.Empty)
          {
            using (FileStream streamWriter = File.Create(theEntry.Name))
            {
              int size = 2048;
              byte[] data = new byte[2048];
              while (true)
              {
                size = s.Read(data, 0, data.Length);
                if (size > 0)
                {
                  streamWriter.Write(data, 0, size);
                }
                else
                {
                  break;
                }
              }
            }
          }
        }
      }
    }
  }
}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。


# C#  # 文件  # 压缩  # 解压  # ZIP格式  # C#实现GZip压缩和解压缩入门实例  # C#实现rar压缩与解压缩文件的方法  # C#文件流进行压缩和解压缩的方法  # C# 利用ICSharpCode.SharpZipLib实现在线压缩和解压缩  # asp.net C#实现解压缩文件的方法  # C#实现的文件压缩和解压缩类  # C#实现压缩和解压缩的方法示例【Gzip和Zip方式】  # C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能  # C#自定义字符串压缩和解压缩的方法  # C#压缩或解压rar、zip文件方法实例  # 程序设计  # 都是  # 如果你  # 成了  # 相关内容  # 感兴趣  # 数据结构  # 给大家  # 点击下载  # 可以选择  # 更多关于  # 经常会  # 所述  # 开源  # 使用技巧  # 面向对象  # 压缩文件  # 过程中  # 文件压缩  # 讲述了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel观察者模式如何使用_Laravel Model Observer配置  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  新三国志曹操传主线渭水交兵攻略  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何在宝塔面板中创建新站点?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  网站建设保证美观性,需要考虑的几点问题!  详解CentOS6.5 安装 MySQL5.1.71的方法  js实现获取鼠标当前的位置  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何升级到最新版本?(升级指南和步骤)  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何快速生成可下载的建站源码工具?  昵图网官网入口 昵图网素材平台官方入口  Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Bootstrap整体框架之CSS12栅格系统  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  IOS倒计时设置UIButton标题title的抖动问题  Mybatis 中的insertOrUpdate操作  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何用景安虚拟主机手机版绑定域名建站?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  高性能网站服务器部署指南:稳定运行与安全配置优化方案  php json中文编码为null的解决办法  黑客入侵网站服务器的常见手法有哪些?  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel怎么在Controller之外的地方验证数据  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)