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

C#打包文件夹成zip格式(包括文件夹和子文件夹下的所有文件)

2011-06-25 18:31 204 查看
C#打包zip文件可以调用现成的第三方dll,事半功倍,而且该dll完全免费,下载地址:SharpZipLib

下载完解压缩后,把 ICSharpCode.SharpZipLib.dll
拷贝到当前项目的目录下(如果偷懒的话,可以直接拷贝到当前项目的bin/Debug目录下),在VS打开的项目引用上右键添加引用
ICSharpCode.SharpZipLib.dll

然后,在VS打开的项目上右键新建一个类,命名为 ZipHelper.cs,把类里面的所有code清空,复制以下代码,粘贴:

复制代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Diagnostics;

using ICSharpCode.SharpZipLib;

using ICSharpCode.SharpZipLib.Zip;

using ICSharpCode.SharpZipLib.Checksums;

using ICSharpCode.SharpZipLib.Core;

namespace ZipOneCode.ZipProvider

{

public class ZipHelper

{

/// <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(File.Create(destinationZipFilePath));

zipStream.SetLevel(6); // 压缩级别 0-9

CreateZipFiles(sourceFilePath, zipStream, sourceFilePath);

zipStream.Finish();

zipStream.Close();

}

/// <summary>

/// 递归压缩文件

/// </summary>

/// <param name="sourceFilePath">待压缩的文件或文件夹路径</param>

/// <param name="zipStream">打包结果的zip文件路径(类似 D:/WorkSpace/a.zip),全路径包括文件名和.zip扩展名</param>

/// <param name="staticFile"></param>

private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream, string staticFile)

{

Crc32 crc = new Crc32();

string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);

foreach (string file in filesArray)

{

if (Directory.Exists(file)) //如果当前是文件夹,递归

{

CreateZipFiles(file, zipStream, staticFile);

}

else //如果是文件,开始压缩

{

FileStream fileStream = File.OpenRead(file);

byte[] buffer = new byte[fileStream.Length];

fileStream.Read(buffer, 0, buffer.Length);

string tempFile = file.Substring(staticFile.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);

}

}

}

}

}

原文地址:http://www.dotnetbbs.com/read.php?tid-59.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: