bootstrap easyui RunJS JSFiddle codepen Gist

C# 文件压缩与解压(ZIP格式)

在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择。

组件的使用比较简单,请参照下面的代码。点击下载项目源码

 

复制代码
/*
* Gary Zhang -- cbcye@live.com
* www.cbcye.com
* www.quicklearn.cn
* cbcye.cnblogs.com
*/

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using System.Diagnostics;
using ICSharpCode.SharpZipLib.Core;

namespace TestConsole
{
class Program
{
staticvoid Main()
{
//CreateZipFile(@"d:\", @"d:\a.zip");
UnZipFile(@"d:\a.zip");

Console.Read();
}


privatestaticvoid CreateZipFile(string filesPath, string zipFilePath)
{

if (!Directory.Exists(filesPath))
{
Console.WriteLine(
"Cannot find directory '{0}'", filesPath);
return;
}


try
{
string[] filenames = Directory.GetFiles(filesPath);
using (ZipOutputStream s =new ZipOutputStream(File.Create(zipFilePath)))
{

s.SetLevel(
9); // 压缩级别 0-9
//s.Password = "123"; //Zip压缩文件密码
byte[] buffer =newbyte[4096]; //缓冲区大小
foreach (string file in filenames)
{
ZipEntry entry
=new ZipEntry(Path.GetFileName(file));
entry.DateTime
= DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes
= fs.Read(buffer, 0, buffer.Length);
s.Write(buffer,
0, sourceBytes);
}
while (sourceBytes >0);
}

}

s.Finish();
s.Close();
}

}

catch (Exception ex)
{
Console.WriteLine(
"Exception during processing {0}", ex);
}

}


privatestaticvoid UnZipFile( string zipFilePath)
{
if (!File.Exists(zipFilePath))
{
Console.WriteLine(
"Cannot find file '{0}'", zipFilePath);
return;
}


using (ZipInputStream s =new ZipInputStream(File.OpenRead(zipFilePath)))
{

ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) !=null)
{

Console.WriteLine(theEntry.Name);

string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);

// create directory
if (directoryName.Length >0)
{
Directory.CreateDirectory(directoryName);
}


if (fileName != String.Empty)
{
using (FileStream streamWriter = File.Create(theEntry.Name))
{

int size =2048;
byte[] data =newbyte[2048];
while (true)
{
size
= s.Read(data, 0, data.Length);
if (size >0)
{
streamWriter.Write(data,
0, size);
}

else
{
break;
}

}

}

}

}

}

}

}


}

posted @ 2012-06-15 23:03  lvyafei  阅读(299)  评论(0编辑  收藏  举报
博客地址:lvyafei 返回顶部   返回顶部   返回顶部 站长QQ,点击这里给我发消息
无觅关联推荐,快速提升流量