您的位置:首页 > 编程语言 > C#

C# 文件压缩下载

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

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

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.IO.Packaging;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("开始压缩");
try
{
PackageFolder(@"E:\IMG", @"E:\压缩包.zip", false);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("压缩完成");
}

/// <summary>
/// 包含子文件夹一起压缩成压缩包文件
/// </summary>
/// <param name="folderName">要压缩的文件夹</param>
/// <param name="compressedFileName">压缩后存放路径</param>
/// <param name="overrideExisting">压缩文件存在是否覆盖</param>
/// <returns>是否压缩成功</returns>
/// <Author></Author>
public static Boolean PackageFolder(String folderName, String compressedFileName, Boolean overrideExisting)
{
if (folderName.EndsWith(@"\"))
folderName = folderName.Remove(folderName.Length - 1);
Boolean result = false;
if (!Directory.Exists(folderName))
{
return result;
}

if (!overrideExisting && File.Exists(compressedFileName))
{
return result;
}
try
{
using (Package package = Package.Open(compressedFileName, FileMode.Create))
{

var fileList = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (String fileName in fileList)
{
//获取所有子文件的文件
String pathInPackage;
pathInPackage = Path.GetDirectoryName(fileName).Replace(folderName, String.Empty) + "/" + Path.GetFileName(fileName);

Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(pathInPackage, UriKind.Relative));
PackagePart packagePartDocument = package.CreatePart(partUriDocument, "", CompressionOption.Fast);
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
fileStream.CopyTo(packagePartDocument.GetStream());
}
}
}
result = true;
}
catch (Exception e)
{
throw new Exception("压缩文件夹错误: " + folderName, e);
}

return result;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: