zoukankan      html  css  js  c++  java
  • C# 压缩文件 ICSharpCode.SharpZipLib.dll

    效果:

    代码只能压缩文件夹里面的文件,不能压缩文件夹。

    压缩前:

    压缩后:

    代码:

    需要引用ICSharpCode.SharpZipLib.dll

    public ActionResult Index()
    {
        //路径
        string path = "E:/test/xls_Z";
        //调用
        CreateZip(path ,path + ".zip");
    }
    
    /// <summary>
    /// 压缩文件
    /// </summary>
    /// <param name="sourceFilePath">文件路径</param>
    /// <param name="destinationZipFilePath">压缩后的地址</param>
    public static void CreateZip(string sourceFilePath, string destinationZipFilePath)
    {
        if (sourceFilePath[sourceFilePath.Length - 1] != System.IO.Path.DirectorySeparatorChar)
            sourceFilePath += System.IO.Path.DirectorySeparatorChar;
        ZipOutputStream zipStream = new ZipOutputStream(System.IO.File.Create(destinationZipFilePath));
        zipStream.SetLevel(6);  // 压缩级别 0-9
        CreateZipFiles(sourceFilePath, zipStream);
        zipStream.Finish();
        zipStream.Close();
    }
    
    /// <summary>
    /// 递归压缩文件
    /// </summary>
    /// <param name="sourceFilePath">待压缩的文件或文件夹路径</param>
    /// <param name="zipStream">打包结果的zip文件路径(类似 D:WorkSpacea.zip),全路径包括文件名和.zip扩展名
    /// <param name="staticFile"></param>
    private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream)
    {
        Crc32 crc = new Crc32();
        string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
        foreach (string file in filesArray)
        {
         //如果当前是文件夹,递归
            if (Directory.Exists(file))                     
            {
                CreateZipFiles(file, zipStream);
            }
         //如果是文件,开始压缩
            else                                            
            {
                FileStream fileStream = System.IO.File.OpenRead(file);
                byte[] buffer = new byte[fileStream.Length];
                fileStream.Read(buffer, 0, buffer.Length);
                string tempFile = file.Substring(sourceFilePath.LastIndexOf("\") + 1);
                ZipEntry entry = new ZipEntry(tempFile);
                entry.DateTime = DateTime.Now;
                entry.Size = fileStream.Length;
                fileStream.Close();
                crc.Reset();
                crc.Update(buffer);
                entry.Crc = crc.Value;
                zipStream.PutNextEntry(entry);
                zipStream.Write(buffer, 0, buffer.Length);
            }
        }
    }
  • 相关阅读:
    LINQ Practice
    windows下python环境安装
    kafka安装教程
    使用python连接mysql/oracle
    使用百度地图实现地图网格
    单链表反转java代码
    mysql的索引问题分析
    java中String字符串的==解析
    辗转相除法的原理
    myeclipse2014新建maven项目
  • 原文地址:https://www.cnblogs.com/cang12138/p/6742269.html
Copyright © 2011-2022 走看看