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:\WorkSpace\a.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); } } }