相关文章推荐
追风的毛衣  ·  opencv-背景减除_createback ...·  11 月前    · 
低调的斑马  ·  eclipse断点调试 - CSDN文库·  1 年前    · 
心软的香菜  ·  JMeter压测数据变量来自文件,压力测试, ...·  1 年前    · 
近视的针织衫  ·  【MQ】kafka(四)——kafka消费者 ...·  1 年前    · 
逆袭的创口贴  ·  黑客入侵中把数据从SQL ...·  2 年前    · 
Code  ›  C# ZIP文件的压缩和解压缩(SharpZipLib.dll)开发者社区
string zip zip格式
https://cloud.tencent.com/developer/article/2109883
踢足球的围巾
2 年前
作者头像
全栈程序员站长
0 篇文章

C# ZIP文件的压缩和解压缩(SharpZipLib.dll)

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 全栈程序员必看 > C# ZIP文件的压缩和解压缩(SharpZipLib.dll)

C# ZIP文件的压缩和解压缩(SharpZipLib.dll)

作者头像
全栈程序员站长
发布 于 2022-09-17 12:10:06
501 0
发布 于 2022-09-17 12:10:06
举报

大家好,又见面了,我是你们的朋友全栈君。

真是折腾呀,网上虽然有不少的源码但测试几个就是不成功,经过折腾还是折腾出来了现在分享出来给大家。

源码还是在网友们的基础上调整的,主要是调整源码大大小写格式。

sharpziplib.dll 下载:http://pan.baidu.com/share/link?shareid=1016448925&uk=134565274&fid=3214033513

首先需要在项目里引用sharpziplib.dll

ZipClass.cs 类函数 包括压缩和解压

using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Checksums;
namespace Updatezip
    #region 压缩文件类
    /// <summary>
    /// 压缩文件   
    /// </summary>
    public class ZipClass
        public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
            //如果文件没有找到,则报错   
            if (!System.IO.File.Exists(FileToZip))
                throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
            System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
            ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
            ZipEntry ZipEntry = new ZipEntry("ZippedFile");
            ZipStream.PutNextEntry(ZipEntry);
            ZipStream.SetLevel(CompressionLevel);
            byte[] buffer = new byte[BlockSize];
            System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
            ZipStream.Write(buffer, 0, size);
                while (size < StreamToZip.Length)
                    int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
                    ZipStream.Write(buffer, 0, sizeRead);
                    size += sizeRead;
            catch (System.Exception ex)
                throw ex;
            ZipStream.Finish();
            ZipStream.Close();
            StreamToZip.Close();
        public void ZipFileMain(string[] args)
            string[] filenames = Directory.GetFiles(args[0]);
            Crc32 Crc = new Crc32();
            ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
            s.SetLevel(6); // 0 - store only to 9 - means best compression   
            foreach (string file in filenames)
                //打开压缩文件   
                FileStream fs = File.OpenRead(file);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                ZipEntry entry = new ZipEntry(file);
                entry.DateTime = DateTime.Now;
                // set Size and the crc, because the information   
                // about the size and crc should be stored in the header   
                // if it is not set it is automatically written in the footer.   
                // (in this case size == crc == -1 in the header)   
                // Some ZIP programs have problems with zip files that don"t store   
                // the size and crc in the header.   
                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();
#endregion
    #region 解压文件类
    /// <summary>
    ///  解压文件
    /// </summary>
    public class UnZipClass
        public void UnZip(string[] args)
            ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));
            ZipEntry theEntry;
            while ((theEntry = s.GetNextEntry()) != null)
                string directoryName = Path.GetDirectoryName(args[1]);
                string fileName = Path.GetFileName(theEntry.Name);
                //生成解压目录   
                Directory.CreateDirectory(directoryName);
                if (fileName != String.Empty)
                    //解压文件到指定的目录   
                    FileStream streamWriter = File.Create(args[1] + 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);
                            break;
                    streamWriter.Close();
            s.Close();
#endregion
}

调用方法

/// <summary>   
/// 调用源码   
/// </summary>   
private void button2_Click_1(object sender, System.EventArgs e)  
    string[] FileProperties = new string[2];  
    FileProperties[0] = "C:\\unzipped\\";//待压缩文件目录   
    FileProperties[1] = "C:\\zip\\a.zip"; //压缩后的目标文件   
    ZipClass Zc = new ZipClass();  
    Zc.ZipFileMain(FileProperties);  
private void button2_Click(object sender, System.EventArgs e)  
 
推荐文章
追风的毛衣  ·  opencv-背景减除_createbackgroundsubtractormog2-CSDN博客
11 月前
低调的斑马  ·  eclipse断点调试 - CSDN文库
1 年前
心软的香菜  ·  JMeter压测数据变量来自文件,压力测试,并发性能测试
1 年前
近视的针织衫  ·  【MQ】kafka(四)——kafka消费者如何消费的?如何防止重复消费?如何顺序消费?_kafka 手动提交offset能避免重复性消费吗-CSDN博客
1 年前
逆袭的创口贴  ·  黑客入侵中把数据从SQL Server输出到文本文件-51CTO.COM
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号