说明:依赖于ICSharpCode.SharpZipLib.dll
1、直接上代码了(仅作参考)
/// <summary>
/// 调用压缩文件
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
string[] FileProperties = new string[4];
FileProperties[0] = "G:\\dishui\\Css";//待压缩文件目录1
FileProperties[1] = "G:\\dishui\\image"; //待压缩文件目录2
FileProperties[2] = "G:\\dishui\\Js"; //待压缩文件目录3
FileProperties[3] = "G:\\dishui\\ddsss"; //不存在的目录
ZipFile(FileProperties, "G:\\zzz.zip"); //输出目录
return View();
}
/// <summary>
/// 压缩文件夹
/// </summary>
/// <param name="strFile">文件夹数组</param>
/// <param name="strZip">输出路径</param>
private static void ZipFile(string[] strFile, string strZip)
{
ZipOutputStream s = new ZipOutputStream(System.IO.File.Create(strZip));
s.SetLevel(6);
for (int i=0,j=strFile.Length;i<j;i++) {
string item = strFile[i];
if (!Directory.Exists(item))
{
continue;
}
zip(item, s, item);
}
s.Finish();
s.Close();
}
private static void zip(string strFile, ZipOutputStream s, string staticFile)
{
Crc32 crc = new Crc32();
string[] filenames = Directory.GetFileSystemEntries(strFile);
foreach (string file in filenames)
{
if (Directory.Exists(file))
{
zip(file, s, staticFile);
}
else // 否则直接压缩文件
{
//打开压缩文件
FileStream fs = System.IO.File.OpenRead(file);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
ZipEntry entry = new ZipEntry(tempfile);
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);
}
}
}