志在指尖
用双手敲打未来

c#运用SharpZipLib压缩与解压文件

usingICSharpCode.SharpZipLib.Zip;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.IO;
namespaceZhong.Core
{
///<summary>
///压缩解压操作类,使用的是SharpZipLib
///</summary>
publicclassDCompress
{
privatestaticobjectoperateLock=newobject();
///<summary>
///压缩文件
///</summary>
///<paramname=”srcFile”>要压缩的文件路径</param>
///<paramname=”destFile”>生成的压缩文件路径</param>
publicstaticvoidCompressFile(stringsrcFile,stringdestFile)
{
lock(operateLock)
{
if(string.IsNullOrEmpty(srcFile)||string.IsNullOrEmpty(destFile))
{
thrownewArgumentException(“参数错误”);
}
FileStreamfileStreamIn=newFileStream(srcFile,FileMode.Open,FileAccess.Read);
FileStreamfileStreamOut=newFileStream(destFile,FileMode.Create,FileAccess.Write);
ZipOutputStreamzipOutStream=newZipOutputStream(fileStreamOut);
//zipOutStream.SetLevel(6);//设置压缩等级,默认为6
byte[]buffer=newbyte[4096];
ZipEntryentry=newZipEntry(Path.GetFileName(srcFile));
zipOutStream.PutNextEntry(entry);
intsize;
do
{
size=fileStreamIn.Read(buffer,0,buffer.Length);
zipOutStream.Write(buffer,0,size);
}while(size>0);
zipOutStream.Dispose();
fileStreamOut.Dispose();
fileStreamIn.Dispose();
}
}
///<summary>
///压缩多个文件
///</summary>
///<paramname=”srcFiles”>多个文件路径</param>
///<paramname=”destFile”>压缩文件的路径</param>
publicstaticvoidZipFiles(string[]srcFiles,stringdestFile)
{
if(srcFiles==null||string.IsNullOrEmpty(destFile))
{
thrownewArgumentException(“参数错误”);
}
using(ZipFilezip=ZipFile.Create(destFile))
{
zip.BeginUpdate();
//addfile
foreach(stringfilePathinsrcFiles)
{
zip.Add(filePath);
}
zip.CommitUpdate();
}
//(newFastZip()).CreateZip(@”E:\1.zip”,@”E:\1\”,true,””);
}
///<summary>
///压缩目录
///</summary>
///<paramname=”dir”>目录路径</param>
///<paramname=”destFile”>压缩文件路径</param>
publicstaticvoidZipDir(stringdir,stringdestFile)
{
if(string.IsNullOrEmpty(dir)||string.IsNullOrEmpty(destFile))
{
thrownewArgumentException(“参数错误”);
}
string[]files=Directory.GetFiles(dir,”*.*”,SearchOption.AllDirectories);
ZipFiles(files,destFile);
}
///<summary>
///列表压缩文件里的所有文件
///</summary>
///<paramname=”zipPath”>压缩文件路径</param>
///<returns></returns>
publicstaticList<string>GetFileList(stringzipPath)
{
List<string>files=newList<string>();
if(string.IsNullOrEmpty(zipPath))
{
thrownewArgumentException(“参数错误”);
}
using(ZipFilezip=newZipFile(zipPath))
{
stringlist=string.Empty;
foreach(ZipEntryentryinzip)
{
if(entry.IsFile)
{
files.Add(entry.Name);
}
}
}
returnfiles;
}
///<summary>
///删除zip文件中的某个文件
///</summary>
///<paramname=”zipPath”>压缩文件路径</param>
///<paramname=”files”>要删除的某个文件</param>
publicstaticvoidDeleteFileFromZip(stringzipPath,string[]files)
{
if(string.IsNullOrEmpty(zipPath)||files==null)
{
thrownewArgumentException(“参数错误”);
}
using(ZipFilezip=newZipFile(zipPath))
{
zip.BeginUpdate();
foreach(stringfinfiles)
{
zip.Delete(f);
}
zip.CommitUpdate();
}
}
///<summary>
///解压文件
///</summary>
///<paramname=”zipPath”>要解压的文件</param>
///<paramname=”outputDir”>解压后放置的目录</param>
publicstaticvoidUnZipFile(stringzipPath,stringoutputDir)
{
(newFastZip()).ExtractZip(zipPath,outputDir,””);
}
///<summary>
///解压文件
///</summary>
///<paramname=”srcFile”>压缩文件路径</param>
///<paramname=”destDir”>解压后文件夹的路径</param>
publicstaticvoidDecompress(stringsrcFile,stringdestDir)
{
lock(operateLock)
{
FileStreamfileStreamIn=newFileStream(srcFile,FileMode.Open,FileAccess.Read);
ZipInputStreamzipInStream=newZipInputStream(fileStreamIn);
if(!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
ZipEntryentry;
while((entry=zipInStream.GetNextEntry())!=null)
{
FileStreamfileStreamOut=newFileStream(destDir+@”\”+entry.Name,FileMode.Create,FileAccess.Write);
intsize;
byte[]buffer=newbyte[4096];
do
{
size=zipInStream.Read(buffer,0,buffer.Length);
fileStreamOut.Write(buffer,0,size);
}while(size>0);
fileStreamOut.Dispose();
}
zipInStream.Dispose();
fileStreamIn.Dispose();
}
}
}
}

未经允许不得转载:IT技术网站 » c#运用SharpZipLib压缩与解压文件
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载