C#实现多文件压缩与解压功能

目录
  • 实现功能
  • 开发环境
  • 实现代码
  • 实现效果

这个功能没什么可介绍的,大家都懂,直接上代码了。。

实现功能

选择多个文件压缩成ZIP文件和解压ZIP文件

开发环境

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码

//需要添加ICSharpCode.SharpZipLib.Zip.dll到自己项目

private void btnCompressFile_Click(object sender, EventArgs e)
 {
     listFiles.Items.Clear();
     OpenFileDialog ofd = new OpenFileDialog();
     ofd.Multiselect = true;
     if (ofd.ShowDialog() == DialogResult.OK)
     {
         listFiles.Items.AddRange(ofd.FileNames);

     }
 }

 private void btnCompress_Click(object sender, EventArgs e)
 {
     if (listFiles.Items.Count == 0)
     {
         MessageBox.Show("请先选择需要压缩的文件");
         return;
     }
     SaveFileDialog sfd = new SaveFileDialog();
     sfd.Filter = "压缩文件|*.zip";
     if (sfd.ShowDialog() == DialogResult.OK)
     {
         string[] files = new string[listFiles.Items.Count];
         for (int i = 0; i < listFiles.Items.Count; i++)
         {
             files[i] = listFiles.Items[i].ToString();
         }
         dynamic result;
         using (ZipOutputStream outStream = new ZipOutputStream(File.Create(sfd.FileName)))
         {
             result = Zip(files, outStream, "123");
         }
         MessageBox.Show(result.msg);

     }

 }

 private void btnUnCompressFile_Click(object sender, EventArgs e)
 {
     FolderBrowserDialog fbd = new FolderBrowserDialog();
     fbd.ShowNewFolderButton = true;
     if (fbd.ShowDialog() == DialogResult.OK)
     {
         txtOutFile.Text = fbd.SelectedPath;
     }
 }

 private void btnUnCompress_Click(object sender, EventArgs e)
 {
     if (string.IsNullOrWhiteSpace(txtOutFile.Text))
     {
         MessageBox.Show("请先选择解压路径");
         return;
     }
     OpenFileDialog ofd = new OpenFileDialog();
     ofd.Filter = "压缩文件|*.zip";
     if (ofd.ShowDialog() == DialogResult.OK)
     {
         dynamic result = UnZip(ofd.FileName, txtOutFile.Text,"123");
         MessageBox.Show(result.msg);
     }
 }
 public dynamic Zip(string[] files, ZipOutputStream outStream, string pwd)
 {
     try
     {
         for (int i = 0; i < files.Length; i++)
         {
             if (!File.Exists(files[i]))
             {
                 throw new Exception("文件不存在");
             }
             using (FileStream fs = File.OpenRead(files[i]))
             {
                 byte[] buffer = new byte[fs.Length];
                 fs.Read(buffer, 0, buffer.Length);
                 if (!string.IsNullOrWhiteSpace(pwd))
                 {
                     outStream.Password = pwd;
                 }
                 ZipEntry ZipEntry = new ZipEntry(Path.GetFileName(files[i]));
                 outStream.PutNextEntry(ZipEntry);
                 outStream.Write(buffer, 0, buffer.Length);
             }
         }

         return new { result = true, msg = "压缩成功" };
     }
     catch (Exception ex)
     {
         return new { result = true, msg = "压缩失败:" + ex.Message };
     }
 }

 public dynamic UnZip(string zipFile, string outPath, string pwd)
 {
     try
     {
         if (!Directory.Exists(outPath))
         {
             Directory.CreateDirectory(outPath);
         }
         using (ZipInputStream zipInputStream = new ZipInputStream(File.OpenRead(zipFile)))
         {
             if (!string.IsNullOrWhiteSpace(pwd))
             {
                 zipInputStream.Password = pwd;
             }
             ZipEntry theEntry;
             while ((theEntry = zipInputStream.GetNextEntry()) != null)
             {
                 using (FileStream streamWriter = File.Create(outPath + "\\" + theEntry.Name))
                 {
                     byte[] data = new byte[1024 * 1024];
                     int dataLength = 0;
                     while ((dataLength = zipInputStream.Read(data, 0, data.Length)) > 0)
                     {
                         streamWriter.Write(data, 0, dataLength);
                     }
                 }

             }
         }
         return new { result = true, msg = "解压成功" };
     }
     catch (Exception ex)
     {
         return new { result = true, msg = "解压失败:" + ex.Message };
     }
 }

实现效果

到此这篇关于C#实现多文件压缩与解压功能的文章就介绍到这了,更多相关C#文件压缩 解压内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C#压缩、解压文件夹/文件(带密码)

    前言 今天梳理一下项目中用到的压缩.解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件.今天就好好整理记录下,别下次遇到需求又重头开始了. DotNetZip DotNetZip是一个开源的免费类库,主要提供了快速操作zip文件的工具集,VB.C#任何.Net语言都可以通过它创建.解压缩zip文件.我使用该类库最主要的目的还是因为它可以创建带密码保护的压缩文件. 只有设置了zip.Password = "password"之后,被压缩的文件才会有密码保护 /// <

  • C#使用SharpZipLib压缩解压文件

    一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icsharpcode/SharpZipLib 下载解压SharpZipLib ,将 ICSharpCode.SharpZipLib .dll 添加至项目引用中. 二.操作指南 1.1  创建zip文件,并添加文件: using (ZipFile zip = ZipFile.Create(@"E:\test.z

  • C#实现多文件打包压缩(.Net Core)

    最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpCode.SharpZipLib 最符合项目的要求. 具体实现如下: 1.在 Nuget 中安装ICSharpCode.SharpZipLib 2.将要打包的文件放到同个文件夹进行压缩: ①压缩文件夹 /// <summary> /// 压缩文件 /// </summary> /// <param name="fileName">压缩后获得的文件名</param>

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

    本文实例讲述了C#实现文件压缩与解压的方法.分享给大家供大家参考,具体如下: 在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择.如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择. 组件的使用比较简单,请参照下面的代码.点击下载项目源码. /* * Gary Zhang -- cbcye@live.com * www.cbcye.com * www.quickl

  • c#打包文件解压缩的实例

    首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载. 下面对类库使用的封装方法: 得到指定的输入流的ZIP压缩流对象 /// <summary> /// 得到指定的输入流的ZIP压缩流对象[原有流对象不会改变] /// </summary> /// <param name="sourceStream"></param> /// <returns></returns> public stati

  • C#实现多文件压缩与解压功能

    目录 实现功能 开发环境 实现代码 实现效果 这个功能没什么可介绍的,大家都懂,直接上代码了.. 实现功能 选择多个文件压缩成ZIP文件和解压ZIP文件 开发环境 开发工具: Visual Studio 2013 .NET Framework版本:4.5 实现代码 //需要添加ICSharpCode.SharpZipLib.Zip.dll到自己项目 private void btnCompressFile_Click(object sender, EventArgs e) { listFiles

  • C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能

    下面给大家介绍C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能,具体代码如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Checksums; using Syst

  • Java实现文件压缩与解压的示例[zip格式,gzip格式]

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩. Java I/O类库还收录了一些能读写压缩格式流的类.要想提供压缩功能,只要把它们包在已有的I/O类的外面就行了.这些类不是Reader和Writer,而是Inpu

  • C#调用7z实现文件的压缩与解压

    1.关于7z 首先在这里先介绍一下7z压缩软件,7z是一种主流的 压缩格式,它拥有极高的压缩比.在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式.主要有以下特点: 来源且模块化的组件结构 最高的压缩比 强大的AES-256加密 可更改配置的压缩算法 支持操大文件 支持多线程压缩 具有多种压缩文件格式 2.解压缩实现代码 实现对文件的解压缩方法是通过cmd命令,调用7z程式通过cmd命令实现对文件进行解压和压缩的操作,具体实现代码如下: 压缩代码 压缩的cmd命令:"7Z a

  • Python实现压缩与解压gzip大文件的方法

    本文实例讲述了Python实现压缩与解压gzip大文件的方法.分享给大家供大家参考,具体如下: #encoding=utf-8 #author: walker #date: 2015-10-26 #summary: 测试gzip压缩/解压文件 import gzip BufSize = 1024*8 def gZipFile(src, dst): fin = open(src, 'rb') fout = gzip.open(dst, 'wb') in2out(fin, fout) def gun

  • python用模块zlib压缩与解压字符串和文件的方法

    python中zlib模块是用来压缩或者解压缩数据,以便保存和传输.它是其他压缩工具的基础.下面来一起看看python用模块zlib压缩与解压字符串和文件的方法.话不多说,直接来看示例代码. 例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zlib.decompress(compressed) print 'original:', repr(messa

  • C#使用GZipStream实现文件的压缩与解压

    本文实例为大家分享了C#实现文件的压缩与解压的具体代码,供大家参考,具体内容如下 需引入 System.IO.Compression; 1.C#代码(入门案例) Console.WriteLine("压缩文件..............."); using (FileStream fr = File.OpenRead("d:\\test.txt")) { using (FileStream fw = File.OpenWrite("d:\\test.zip

  • Python实现多级目录压缩与解压文件的方法

    本文实例讲述了Python实现多级目录压缩与解压文件的方法.分享给大家供大家参考,具体如下: 咱向来就是拿来主意,也发个东西供同行"拿来"使用吧 咱信奉的就是少量的代码完成大量的工作,虽然代码不多,但还是要用大脑的.发出来供大家参考 功能: 支持中文路径,支持多级目录 支持跨平台,在linux和window下都可直接使用 压缩的多态性 压缩包不带级父文件夹目录压缩 压缩包带父级文件夹目录 不指定目标文件与路径压缩 指定压缩包名称不指定路径压缩 还是看代码吧 #coding:utf-8

随机推荐