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

C# ZIP文件的压缩和解压缩(SharpZipLib.dll)真是折腾呀,网上虽然有不少的源码但测试几个就是不成功,经过折腾还是折腾出来了现在分享出来给大家。源码还是在网友们的基础上调整的,主要是调整源码大大小写格式。sharpziplib.dll下载:http://pan.baidu.com/share/link?shareid=1016448925&uk=134565274&fid=3214033513首先需要在项目里引用sharp

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

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);
            try
            {
                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);
                        }
                        else
                        {
                            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)  
{  
    string[] FileProperties = new string[2];  
    FileProperties[0] = "C:\\zip\\test.zip";//待解压的文件   
    FileProperties[1] = "C:\\unzipped\\";//解压后放置的目标目录   
    UnZipClass UnZc = new UnZipClass();  
    UnZc.UnZip(FileProperties);  
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159431.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql添加唯一索引语句_mysql自动创建索引

    mysql添加唯一索引语句_mysql自动创建索引查看索引showindexfrom数据库表名altertable数据库addindex索引名称(数据库字段名称)PRIMARYKEY(主键索引)ALTERTABLE`table_name`ADDPRIMARYKEY(`column`)UNIQUE(唯一索引)ALTERTABLE`table_name`ADDUNIQUE(`column`)INDEX(普…

  • 下载并安装windows版本的Redis

    打开官网:https://redis.io/download发现官网名没有提供Windows版本,只有Linux版本,费了一番周折,说是GitHub上才有地址是:https://github.com/MicrosoftArchive/redis/tags貌似比Linux的版本有点滞后,应该不影响,下载最新版本吧先download,下载mis版这个网站在国外,…

  • pycharm 中切换虚拟环境的总结

    pycharm 中切换虚拟环境的总结一、理清思路太重要了1、首先了解对应虚拟环境的运行机制你才能找到正确的解决方案2、分享我个人遇到的问题及解决方案首先安装好了django框架后,在cmd里面能正常运行,但是在Pycharm里面总是不能运行成功,老是报没有激活的问题。首先我们来看在cmd中成功运行的界面:在cmd里面我们切换至对应工程的路径输入命令:pythonmanage.pyrunserver127.0.0.1:8888,我们可以看到Startingdevelopmentserverathttp://127.0

  • Linux读写执行(RWX)权限

    Linux读写执行(RWX)权限rwx权限对文件rwx权限 对文件的作用 读权限(r) 表示可读取此文件中的实际内容,例如,可以对文件执行cat、more、less、head、tail等文件查看命令。 写权限(w) 表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行vim、echo等修改文件数据的命令。注意,无权限不赋予用户删除文件的权利,除非用户对文件的上级目录拥有写权限才可以。 执行权限(x) 表示该文件具有被系统执行的权限。Window系统中查看一个文件是否为可执行文件,

  • Java大数据开发[通俗易懂]

    Java大数据开发[通俗易懂](后记:写这些东西不管出于什么目的,总之自己乐意,有时候回顾一下,别有一番滋味!)博主QQ:1103088881idea从菜鸟到大神css-3d旋转相册时钟罗盘Java学习方法总结Java面向对象程序开发及实战Java高级特性编程及实战MySQL数据库应用技术及实战HTMLCSSJa…

  • php开发微信支付获取用户地址

    php开发微信支付获取用户地址

    2021年10月15日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号