首页 > 编程知识 正文

C#将多个文件打包成.zip文件

时间:2023-05-03 22:23:57 阅读:282642 作者:1226

本文主要是介绍了下利用ICSharpCode.SharpZipLib.dll(官方下载地址:http://www.icsharpcode.net/opensource/sharpziplib/)这个程序集将windows文件进行打包。

下面给出ZipHelper.cs这个类全部代码,代码中只包含了对多个文件的打包(暂时不包括文件夹和解压功能)

using System;using System.Linq;using System.IO;using ICSharpCode.SharpZipLib.Zip;using ICSharpCode.SharpZipLib.Checksums;namespace WindowsFormsApplication1{ public class ZipHelper { /// <summary> /// 压缩多个文件 /// </summary> /// <param name="files">文件名</param> /// <param name="ZipedFileName">压缩包文件名</param> /// <param name="Password">解压码</param> /// <returns></returns> public static void Zip(string[] files, string ZipedFileName, string Password) { files = files.Where(f => File.Exists(f)).ToArray(); if (files.Length == 0) throw new FileNotFoundException("未找到指定打包的文件"); ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFileName)); s.SetLevel(6); if (!string.IsNullOrEmpty(Password.Trim())) s.Password = Password.Trim(); ZipFileDictory(files, s); s.Finish(); s.Close(); } /// <summary> /// 压缩多个文件 /// </summary> /// <param name="files">文件名</param> /// <param name="ZipedFileName">压缩包文件名</param> /// <returns></returns> public static void Zip(string[] files, string ZipedFileName) { Zip(files, ZipedFileName, string.Empty); } private static void ZipFileDictory(string[] files, ZipOutputStream s) { ZipEntry entry = null; FileStream fs = null; Crc32 crc = new Crc32(); try { //创建当前文件夹 entry = new ZipEntry("/"); //加上 “/” 才会当成是文件夹创建 s.PutNextEntry(entry); s.Flush(); foreach (string file in files) { //打开压缩文件 fs = File.OpenRead(file); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); entry = new ZipEntry("/" + Path.GetFileName(file)); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; s.PutNextEntry(entry); s.Write(buffer, 0, buffer.Length); } } finally { if (fs != null) { fs.Close(); fs = null; } if (entry != null) entry = null; GC.Collect(); } } }}
直接调用 ZipHelper.Zip(filepaths,zipedfilepath)即可。

注意: zipedfilepath的父级目录必须存在,否则在创建.zip文件时会报目录不存在错误。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。