虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能

C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能
类别:C#编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了C 使用ICSharpCode SharpZipLib dll进行文件的压缩与解压功能,需要的朋友可以参考下

下面给大家介绍C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能,具体代码如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;
    using ICSharpCode.SharpZipLib.Checksums;
    using System.Security.Cryptography;
    namespace zip压缩与解压{
    public class ZipHelper {
    /// <summary> /// 压缩单个文件 /// </summary> /// <param name="fileToZip">需压缩的文件名</param> /// <param name="zipFile">压缩后的文件名(文件名都是绝对路径)</param> /// <param name="level">压缩等级(0-9)</param> /// <param name="password">压缩密码(解压是需要的密码)</param> public static void ZipFile(string fileToZip, string zipFile, int level = 5, string password = "123") {
    if (!File.Exists(fileToZip)) throw new FileNotFoundException("压缩文件" + fileToZip + "不存在");
    using (FileStream fs = File.OpenRead(fileToZip)) {
    fs.Position = 0;
    //设置流的起始位置 byte[] buffer = new byte[(int)fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    //读取的时候设置Position,写入的时候不需要设置 fs.Close();
    using (FileStream zfstram = File.Create(zipFile)) {
    using (ZipOutputStream zipstream = new ZipOutputStream(zfstram)) {
    zipstream.Password = md5(password);
    //设置属性的时候在PutNextEntry函数之前 zipstream.SetLevel(level);
    string fileName = fileToZip.Substring(fileToZip.LastIndexOf('\') + 1);
    ZipEntry entry = new ZipEntry(fileName);
    zipstream.PutNextEntry(entry);
    zipstream.Write(buffer, 0, buffer.Length);
    }
    }
    }
    }
    /// <summary> /// 压缩多个文件目录 /// </summary> /// <param name="dirname">需要压缩的目录</param> /// <param name="zipFile">压缩后的文件名</param> /// <param name="level">压缩等级</param> /// <param name="password">密码</param> public static void ZipDir(string dirname, string zipFile, int level = 5, string password = "123") {
    ZipOutputStream zos = new ZipOutputStream(File.Create(zipFile));
    zos.Password = md5(password);
    zos.SetLevel(level);
    addZipEntry(dirname, zos, dirname);
    zos.Finish();
    zos.Close();
    }
    /// <summary> /// 往压缩文件里面添加Entry /// </summary> /// <param name="PathStr">文件路径</param> /// <param name="zos">ZipOutputStream</param> /// <param name="BaseDirName">基础目录</param> private static void addZipEntry(string PathStr, ZipOutputStream zos, string BaseDirName) {
    DirectoryInfo dir = new DirectoryInfo(PathStr);
    foreach (FileSystemInfo item in dir.GetFileSystemInfos()) {
    if ((item.Attributes & FileAttributes.Directory) == FileAttributes.Directory)//如果是文件夹继续递归 {
    addZipEntry(item.FullName, zos, BaseDirName);
    }
    else {
    FileInfo f_item = (FileInfo)item;
    using (FileStream fs = f_item.OpenRead()) {
    byte[] buffer = new byte[(int)fs.Length];
    fs.Position = 0;
    fs.Read(buffer, 0, buffer.Length);
    fs.Close();
    ZipEntry z_entry = new ZipEntry(item.FullName.Replace(BaseDirName, ""));
    zos.PutNextEntry(z_entry);
    zos.Write(buffer, 0, buffer.Length);
    }
    }
    }
    }
    /// <summary> /// 解压多个文件目录 /// </summary> /// <param name="zfile">压缩文件绝对路径</param> /// <param name="dirname">解压文件目录</param> /// <param name="password">密码</param> public static void UnZip(string zfile, string dirname, string password) {
    if (!Directory.Exists(dirname)) Directory.CreateDirectory(dirname);
    using (ZipInputStream zis = new ZipInputStream(File.OpenRead(zfile))) {
    zis.Password = md5(password);
    ZipEntry entry;
    while ((entry = zis.GetNextEntry()) != null) {
    var strArr = entry.Name.Split('\');
    //这边判断压缩文件里面是否存在目录,存在的话先创建目录后继续解压 if (strArr.Length > 2) Directory.CreateDirectory(dirname + @"" + strArr[1]);
    using (FileStream dir_fs = File.Create(dirname + entry.Name)) {
    int size = 1024 * 2;
    byte[] buffer = new byte[size];
    while (true) {
    size = zis.Read(buffer, 0, buffer.Length);
    if (size > 0) dir_fs.Write(buffer, 0, size);
    else break;
    }
    }
    }
    }
    }
    private static string md5(string pwd) {
    var res = "";
    MD5 md = MD5.Create();
    byte[] s = md.ComputeHash(Encoding.Default.GetBytes(pwd));
    for (int i = 0;
    i < s.Length;
    i++) res = res + s[i].ToString("X");
    return res;
    }
    }
    }

调用函数如下:

    static void Main(string[] args) {
    var str = @"学籍导入模板.xls";
    //var arr=str.Split('\');
    var filePath = @"D:程序文件VS2010学习StudyProgramzip压缩与解压File学籍导入模板.xls";
    //ZipHelper.ZipFile(filePath, @"D:程序文件VS2010学习StudyProgramzip压缩与解压Filetest.zip", 6, "123");
    var dirPath = @"D:程序文件VS2010学习StudyProgramzip压缩与解压";
    //ZipHelper.ZipDir(dirPath + @"File", dirPath + @"File.zip", 6, "huage");
    ZipHelper.UnZip(dirPath + @"File.zip", dirPath + @"test", "huage");
    Console.ReadKey();
    }

效果图如下:

总结

以上所述是小编给大家介绍的C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

  • c# 动态加载dll文件,并实现调用其中的方法(推荐)
  • C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)
  • C#中加载dll并调用其函数的实现方法
  • C#创建dll类库的图文步骤
  • C#调用C++DLL传递结构体数组的终极解决方案
  • VS2015 C#生成dll文件的方法(32/64)
  • ASP.NET/C#中如何调用动态链接库DLL
  • C++调用C#的DLL程序实现方法
相关热词搜索: c ICSharpCode SharpZipLib dll dll文件