• C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用


    工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的dll就是ICSharpCode.SharpZipLib.dll,废话不多了,网上也有很多的资料,我将其最常用的两个函数整理了一下,提供了一个通用的类,这样在工作中可以快速的完成压缩和解压缩的动作哦

    官网下载地址:  http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx 

    1. 在项目中添加对ICSharpCode.SharpZipLib.dll的引用;

    2. 在需要使用到ICSharpCode.SharpZipLib中定义的类的编码界面中将其导入(Imports)

     1 using ICSharpCode.SharpZipLib.Zip;
     2 using System;
     3 using System.IO;
     4 
     5 namespace ZTO.WayBill.Utilities
     6 {
     7     /// <summary>
     8     /// 压缩类
     9     /// http://www.cnblogs.com/kissdodog/p/3525295.html 
    10 
    11     /// </summary>
    12     public class ZipHelper
    13     {
    14         /// <summary>
    15         /// 压缩文件夹
    16         /// </summary>
    17         /// <param name="source">源目录</param>
    18         /// <param name="s">ZipOutputStream对象</param>
    19         public static void Compress(string source, ZipOutputStream s)
    20         {
    21             string[] filenames = Directory.GetFileSystemEntries(source);
    22             foreach (string file in filenames)
    23             {
    24                 if (Directory.Exists(file))
    25                 {
    26                     // 递归压缩子文件夹
    27                     Compress(file, s);
    28                 }
    29                 else
    30                 {
    31                     using (FileStream fs = File.OpenRead(file))
    32                     {
    33                         byte[] buffer = new byte[4 * 1024];
    34                         // 此处去掉盘符,如D:1231.txt 去掉D:
    35                         ZipEntry entry = new ZipEntry(file.Replace(Path.GetPathRoot(file), ""));
    36                         entry.DateTime = DateTime.Now;
    37                         s.PutNextEntry(entry);
    38                         int sourceBytes;
    39                         do
    40                         {
    41                             sourceBytes = fs.Read(buffer, 0, buffer.Length);
    42                             s.Write(buffer, 0, sourceBytes);
    43                         } while (sourceBytes > 0);
    44                     }
    45                 }
    46             }
    47         }
    48 
    49         /// <summary>
    50         /// 解压缩
    51         /// </summary>
    52         /// <param name="sourceFile">压缩包完整路径地址</param>
    53         /// <param name="targetPath">解压路径是哪里</param>
    54         /// <returns></returns>
    55         public static bool Decompress(string sourceFile, string targetPath)
    56         {
    57             if (!File.Exists(sourceFile))
    58             {
    59                 throw new FileNotFoundException(string.Format("未能找到文件 '{0}' ", sourceFile));
    60             }
    61             if (!Directory.Exists(targetPath))
    62             {
    63                 Directory.CreateDirectory(targetPath);
    64             }
    65             using (var s = new ZipInputStream(File.OpenRead(sourceFile)))
    66             {
    67                 ZipEntry theEntry;
    68                 while ((theEntry = s.GetNextEntry()) != null)
    69                 {
    70                     if (theEntry.IsDirectory)
    71                     {
    72                         continue;
    73                     }
    74                     string directorName = Path.Combine(targetPath, Path.GetDirectoryName(theEntry.Name));
    75                     string fileName = Path.Combine(directorName, Path.GetFileName(theEntry.Name));
    76                     if (!Directory.Exists(directorName))
    77                     {
    78                         Directory.CreateDirectory(directorName);
    79                     }
    80                     if (!String.IsNullOrEmpty(fileName))
    81                     {
    82                         using (FileStream streamWriter = File.Create(fileName))
    83                         {
    84                             int size = 4096;
    85                             byte[] data = new byte[size];
    86                             while (size > 0)
    87                             {
    88                                 streamWriter.Write(data, 0, size);
    89                                 size = s.Read(data, 0, data.Length);
    90                             }
    91                         }
    92                     }
    93                 }
    94             }
    95             return true;
    96         }
    97     }
    98 }
  • 相关阅读:
    oracle 中有数据但是sql查询不出来结果(中文)
    linux mac 命令行 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
    各地图坐标系知识及其转换方法
    Arcgis更新sde库许可
    运营商的三大数据域——B域,O域,M域
    SQL语句大全,所有的SQL都在这里
    苹果手机开启热点后,电脑搜索不到
    ArcgisServer在Linux系统上更新许可
    Linux 查询文件内容重复数 uniq、sort命令
    Atom 配置 Python
  • 原文地址:https://www.cnblogs.com/wohexiaocai/p/4419602.html
Copyright © 2020-2023  润新知