在C#中压缩解压缩文件的两种方式:
使用开源的 SharpZipLib ,下面的代码是使用SharpZipLib做简单封装的压缩解压缩类:
/// <summary>
/// FileZipLib 压缩,解压缩的类
/// </summary>
public class FileZipLib
{
public FileZipLib() {}
/// <summary>
/// 创建一个压缩文件
/// </summary>
/// <param name="zipFilename">压缩后的文件名</param>
/// <param name="sourceDirectory">待压缩文件的所在目录</param>
public static void PackFiles(string zipFilename,string sourceDirectory)
{
FastZip fz = new FastZip() ;
fz.CreateEmptyDirectories = true ;
fz.CreateZip(zipFilename,sourceDirectory,true,"") ;
fz = null ;
}
/// <summary>
/// 解压缩文件
/// </summary>
/// <param name="zipFile">待解压缩的文件</param>
/// <param name="directory">解压缩后文件存放的目录</param>
public static bool UnpackFiles(string zipFile,string directory)
{
if( !Directory.Exists(directory) )
Directory.CreateDirectory(directory) ;
ZipInputStream zis = new ZipInputStream( File.OpenRead(zipFile) ) ;
ZipEntry theEntry = null ;
while( (theEntry = zis.GetNextEntry()) != null )
{
string directoryName = Path.GetDirectoryName(theEntry.Name) ;
string fileName = Path.GetFileName(theEntry.Name) ;
if( directoryName != string.Empty )
Directory.CreateDirectory(directory + directoryName) ;
if( fileName != string.Empty )
{
FileStream streamWriter = File.Create( Path.Combine( directory,theEntry.Name) ) ;
int size = 2048 ;
byte[] data = new byte[size] ;
while ( true )
{
size = zis.Read(data,0,data.Length) ;
if( size > 0 )
streamWriter.Write( data,0,size ) ;
else
break ;
}
streamWriter.Close() ;
}
}
zis.Close() ;
return true ;
}
}
最后别忘了using ICSharpCode.SharpZipLib.Zip ;
以上代码参照 利用 SharpZipLib方便地压缩和解压缩文件 而做了小修改
另外一种方法使用Microsoft J# 类库,具体参考MSDN文章:
通过 C# 使用 J# 类库中的 Zip 类压缩文件和数据
本文首发于http://www.365keyi.com/article.asp?id=5