C# 文件压缩下载

来源:互联网 发布:卢瑟经济学-知乎 编辑:程序博客网 时间:2024/04/28 16:32

我们开发的过程中,有时用户要求下载的时候把文件进行压缩,以压缩包的形式下载到本地,方便保存和分类,以下是文件压缩的一个方法,以供参考

(注:System.IO.Packaging 需要引用WindowsBase.dll,才可以用

[csharp] view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.IO.Packaging;  
  7.   
  8. namespace ConsoleApplication1  
  9. {  
  10.     class Program  
  11.     {  
  12.         static void Main(string[] args)  
  13.         {  
  14.             Console.WriteLine("开始压缩");  
  15.             try  
  16.             {  
  17.                 PackageFolder(@"E:\IMG", @"E:\压缩包.zip"false);  
  18.             }  
  19.             catch (Exception ex)  
  20.             {  
  21.                 Console.WriteLine(ex.Message);  
  22.             }  
  23.             Console.WriteLine("压缩完成");  
  24.         }  
  25.   
  26.         /// <summary>  
  27.         /// 包含子文件夹一起压缩成压缩包文件  
  28.         /// </summary>  
  29.         /// <param name="folderName">要压缩的文件夹</param>  
  30.         /// <param name="compressedFileName">压缩后存放路径</param>  
  31.         /// <param name="overrideExisting">压缩文件存在是否覆盖</param>  
  32.         /// <returns>是否压缩成功</returns>  
  33.         /// <Author></Author>  
  34.         public static Boolean PackageFolder(String folderName, String compressedFileName, Boolean overrideExisting)  
  35.         {  
  36.             if (folderName.EndsWith(@"\"))  
  37.                 folderName = folderName.Remove(folderName.Length - 1);  
  38.             Boolean result = false;  
  39.             if (!Directory.Exists(folderName))  
  40.             {  
  41.                 return result;  
  42.             }  
  43.   
  44.             if (!overrideExisting && File.Exists(compressedFileName))  
  45.             {  
  46.                 return result;  
  47.             }  
  48.             try  
  49.             {  
  50.                 using (Package package = Package.Open(compressedFileName, FileMode.Create))  
  51.                 {  
  52.                       
  53.                     var fileList = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);  
  54.                     foreach (String fileName in fileList)  
  55.                     {  
  56.                         //获取所有子文件的文件  
  57.                         String pathInPackage;  
  58.                         pathInPackage = Path.GetDirectoryName(fileName).Replace(folderName, String.Empty) + "/" + Path.GetFileName(fileName);  
  59.   
  60.                         Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(pathInPackage, UriKind.Relative));  
  61.                         PackagePart packagePartDocument = package.CreatePart(partUriDocument, "", CompressionOption.Fast);  
  62.                         using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))  
  63.                         {  
  64.                             fileStream.CopyTo(packagePartDocument.GetStream());  
  65.                         }  
  66.                     }  
  67.                 }  
  68.                 result = true;  
  69.             }  
  70.             catch (Exception e)  
  71.             {  
  72.                 throw new Exception("压缩文件夹错误: " + folderName, e);  
  73.             }  
  74.   
  75.             return result;  
  76.         }  
  77.     }  
  78. }  
原创粉丝点击