首页 > 编程语言 >打工笔记--------------------------------c#处理ZIP文件帮助类

打工笔记--------------------------------c#处理ZIP文件帮助类

时间:2023-11-09 11:55:33浏览次数:42  
标签:-------------------------------- zipOutputStream string ZIP c# zipEntry fileStre

一,代码

using System;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
namespace Helper
{
    public class ZipHelper
    {
        public static bool ZipDirectory(string folderToZip, ZipOutputStream zipStream, string parentFolderName)
        {
            bool result = true;
            ZipEntry zipEntry = null;
            FileStream fileStream = null;
            Crc32 crc = new Crc32();
            try
            {
                zipEntry = new ZipEntry(Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/"));
                zipStream.PutNextEntry(zipEntry);
                zipStream.Flush();
                string[] files = Directory.GetFiles(folderToZip);
                string[] array = files;
                foreach (string path in array)
                {
                    fileStream = File.OpenRead(path);
                    byte[] array2 = new byte[fileStream.Length];
                    fileStream.Read(array2, 0, array2.Length);
                    zipEntry = new ZipEntry(Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/" + Path.GetFileName(path)));
                    zipEntry.DateTime = DateTime.Now;
                    zipEntry.Size = fileStream.Length;
                    fileStream.Close();
                    crc.Reset();
                    crc.Update(array2);
                    zipEntry.Crc = crc.Value;
                    zipStream.PutNextEntry(zipEntry);
                    zipStream.Write(array2, 0, array2.Length);
                }
            }
            catch
            {
                result = false;
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Close();
                    fileStream.Dispose();
                }

                if (zipEntry != null)
                {
                    zipEntry = null;
                }

                GC.Collect();
                GC.Collect(1);
            }

            string[] directories = Directory.GetDirectories(folderToZip);
            string[] array3 = directories;
            int num = 0;
            while (true)
            {
                if (num < array3.Length)
                {
                    string folderToZip2 = array3[num];
                    if (!ZipDirectory(folderToZip2, zipStream, folderToZip))
                    {
                        break;
                    }

                    num++;
                    continue;
                }

                return result;
            }

            return false;
        }

        public static bool ZipDirectory(string folderToZip, string zipedFile, string password)
        {
            bool result = false;
            if (!Directory.Exists(folderToZip))
            {
                return result;
            }

            ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(zipedFile));
            zipOutputStream.SetLevel(6);
            if (!string.IsNullOrEmpty(password))
            {
                zipOutputStream.Password = password;
            }

            result = ZipDirectory(folderToZip, zipOutputStream, "");
            zipOutputStream.Finish();
            zipOutputStream.Close();
            return result;
        }

        public static bool ZipDirectory(string folderToZip, string zipedFile)
        {
            return ZipDirectory(folderToZip, zipedFile, null);
        }

        public static bool ZipFile(string fileToZip, string zipedFile, string password)
        {
            bool result = true;
            ZipOutputStream zipOutputStream = null;
            FileStream fileStream = null;
            ZipEntry zipEntry = null;
            if (!File.Exists(fileToZip))
            {
                return false;
            }

            try
            {
                fileStream = File.OpenRead(fileToZip);
                byte[] array = new byte[fileStream.Length];
                fileStream.Read(array, 0, array.Length);
                fileStream.Close();
                fileStream = File.Create(zipedFile);
                zipOutputStream = new ZipOutputStream(fileStream);
                if (!string.IsNullOrEmpty(password))
                {
                    zipOutputStream.Password = password;
                }

                zipEntry = new ZipEntry(Path.GetFileName(fileToZip));
                zipOutputStream.PutNextEntry(zipEntry);
                zipOutputStream.SetLevel(6);
                zipOutputStream.Write(array, 0, array.Length);
            }
            catch
            {
                result = false;
            }
            finally
            {
                if (zipOutputStream != null)
                {
                    zipOutputStream.Finish();
                    zipOutputStream.Close();
                }

                if (zipEntry != null)
                {
                    zipEntry = null;
                }

                if (fileStream != null)
                {
                    fileStream.Close();
                    fileStream.Dispose();
                }
            }

            GC.Collect();
            GC.Collect(1);
            return result;
        }

        public static bool ZipFile(string fileToZip, string zipedFile)
        {
            return ZipFile(fileToZip, zipedFile, null);
        }

        public static bool Zip(string fileToZip, string zipedFile, string password)
        {
            bool result = false;
            if (Directory.Exists(fileToZip))
            {
                result = ZipDirectory(fileToZip, zipedFile, password);
            }
            else if (File.Exists(fileToZip))
            {
                result = ZipFile(fileToZip, zipedFile, password);
            }

            return result;
        }

        public static bool Zip(string fileToZip, string zipedFile)
        {
            return Zip(fileToZip, zipedFile, null);
        }

        public static bool UnZip(string fileToUnZip, string zipedFolder, string password)
        {
            bool result = true;
            FileStream fileStream = null;
            ZipInputStream zipInputStream = null;
            ZipEntry zipEntry = null;
            if (!File.Exists(fileToUnZip))
            {
                return false;
            }

            if (!Directory.Exists(zipedFolder))
            {
                Directory.CreateDirectory(zipedFolder);
            }

            try
            {
                zipInputStream = new ZipInputStream(File.OpenRead(fileToUnZip));
                if (!string.IsNullOrEmpty(password))
                {
                    zipInputStream.Password = password;
                }

                while ((zipEntry = zipInputStream.GetNextEntry()) != null)
                {
                    if (string.IsNullOrEmpty(zipEntry.Name))
                    {
                        continue;
                    }

                    string text = Path.Combine(zipedFolder, zipEntry.Name);
                    text = text.Replace('/', '\\');
                    if (text.EndsWith("\\"))
                    {
                        Directory.CreateDirectory(text);
                        continue;
                    }

                    fileStream = File.Create(text);
                    int num = 2048;
                    byte[] array = new byte[2048];
                    while (true)
                    {
                        num = fileStream.Read(array, 0, array.Length);
                        if (num <= 0)
                        {
                            break;
                        }

                        fileStream.Write(array, 0, array.Length);
                    }
                }
            }
            catch
            {
                result = false;
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Close();
                    fileStream.Dispose();
                }

                if (zipInputStream != null)
                {
                    zipInputStream.Close();
                    zipInputStream.Dispose();
                }

                if (zipEntry != null)
                {
                    zipEntry = null;
                }

                GC.Collect();
                GC.Collect(1);
            }

            return result;
        }

        public static bool UnZip(string fileToUnZip, string zipedFolder)
        {
            return UnZip(fileToUnZip, zipedFolder, null);
        }
    }
}

 

标签:--------------------------------,zipOutputStream,string,ZIP,c#,zipEntry,fileStre
From: https://www.cnblogs.com/misakayoucn/p/17819387.html

相关文章

  • Lucky Array
    数据结构抽象题法一:总共加\(O(10^9)\)次,我们常数超小的树状数组可以直接拿下!!!(时限4.0s)法二:答案不多,值域不大,我们分块,块记录数出现的次数,然后用tag维护一下增量,注意cnt里的东西和tag没关系,查询才要用到tag。时间复杂度\(O(30N\sqrt{N}=10^9)\),看似没优化,但是实际上当\(d<0\)时......
  • No MyBatis mapper was found in ‘[SpringBoot启动类所在路径]‘ package 原因解析及
    NoMyBatismapperwasfoundin‘[SpringBoot启动类所在路径]‘package原因解析及解决方案NoMyBatismapperwasfoundin'[XXX]'package友情提示:搜到这篇文章的,一般是急于解决这个问题的,看下常见原因排除后,可以忽略分析过程直接看解决方案,我自己出现这个问题的原因主......
  • CRM系统操作难度高,如何避免踩坑?
    虽然大多数的CRM软件都在说自家系统操作简单这个理念,但是“CRM系统操作难度高怎么办”一直是客户常常会抱怨的问题。对于使用者而言系统操作是否容易理解、功能是否直观十分重要,那么如何避免踩坑呢?化繁为简许多企业在前期规划CRM系统时,都准备了复杂的方案,大量的模块、字段自定......
  • docker mqtt搭建
    DockerMQTT搭建教程简介本文将教你如何使用Docker搭建MQTT服务器。首先,我们会介绍整个流程,并用表格展示具体步骤。然后,我们会详细说明每一步需要做什么,并提供相应的代码。流程概览以下是搭建DockerMQTT服务器的步骤概览:步骤 描述1.安装Docker 在主机上安装Docker引擎2.拉取M......
  • angular-ui-router学习
    资料地址:UI-RouterforAngularJS(1.x)-HelloGalaxy!-UI-Router重点学习了:NestedStates嵌套状态,主要用来解决多个组件组合在一起,进行布局的问题。 ......
  • 大屏展示技术栈:vue2+echarts+dataV
    1.大屏搭建使用的是dataV组件http://datav.jiaminghi.com/guide,使用dataV组件有如下注意点:a.修改配置项config中data的值,需要重新赋值configb.修改dataV某些内置样式,他有个固定的类2.登录界面动态背景,使用的是vanta.jsVanta.js-Animated3DBackgroundsForYourWebsite......
  • CRM系统管理线索分为几个步骤?
    线索管理是CRM系统的重头戏,这个过程中CRM软件可以对大量的销售线索进行评分分析,并加以培育转化,形成一个个新的销售机会。CRM系统管理线索分为几个步骤?通常我们分为这5个步骤:一、生成线索生成是首要任务,只有盘子做大才会有更多目标客户被我们挖掘出来,除了常见的Excel表格批量导......
  • vue文件上传
    单文件上传前端部分:<template><br><a-fromlabel="上传文件"><a-inputtype="file"></a-input><a-button@click="upload"type="danger">上传</a-button></a-from></tem......
  • CRM和小企业CRM,有什么区别?
    在CRM领域我们有两条产品线,一个是CRM,另一个是小企业CRM(Bigin)。您可以把Bigin看成Zoho CRM系统的副线,用来满足更小规模和初级发展阶段的企业,以更加全面的产品和解决方案服务市场。那么CRM和小企业CRM该选哪个?CRM和Bigin的区别Bigin是CRM的Mini版,保留了CRM最核心的功能——客户......
  • LeetCode_0042. 接雨水
    题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨......