- usingSystem;
- usingSystem.IO;
- usingSystem.Text;
- usingSystem.Collections;
- usingSystem.Diagnostics;
- usingSystem.Runtime.Serialization.Formatters.Binary;
- usingICSharpCode.SharpZipLib;
- usingICSharpCode.SharpZipLib.Checksums;
- usingICSharpCode.SharpZipLib.Zip;
- usingICSharpCode.SharpZipLib.GZip;
- usingICSharpCode.SharpZipLib.BZip2;
- usingICSharpCode.SharpZipLib.Zip.Compression;
- usingICSharpCode.SharpZipLib.Zip.Compression.Streams;
- ///<summary>
- ///Zip文件压缩、解压
- ///</summary>
- publicclassZipFile
- {
- ///<summary>
- ///解压类型
- ///</summary>
- publicenumUnzipType
- {
- ///<summary>
- ///解压到当前压缩文件所在的目录
- ///</summary>
- ToCurrentDirctory,
- ///<summary>
- ///解压到与压缩文件名相同的新的目录,如果有多个文件,将为每个文件创建一个目录
- ///</summary>
- ToNewDirctory
- }
- ///<summary>
- ///压缩文件,默认目录为当前目录,文件名为当前目录名,压缩级别为6
- ///</summary>
- ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
- publicvoidZip(paramsstring[]fileOrDirectory)
- {
- Zip(6,fileOrDirectory);
- }
- ///<summary>
- ///压缩文件,默认目录为当前目录,文件名为当前目录名
- ///</summary>
- ///<paramname="zipLevel">压缩的级别</param>
- ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
- publicvoidZip(intzipLevel,paramsstring[]fileOrDirectory)
- {
- if(fileOrDirectory==null)
- return;
- elseif(fileOrDirectory.Length<1)
- return;
- else
- {
- stringstr=fileOrDirectory[0];
- if(str.EndsWith("//"))
- str=str.Substring(0,str.Length-1);
- str+=".zip";
- Zip(str,zipLevel,fileOrDirectory);
- }
- }
- ///<summary>
- ///压缩文件,默认目录为当前目录
- ///</summary>
- ///<paramname="zipedFileName">压缩后的文件</param>
- ///<paramname="zipLevel">压缩的级别</param>
- ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
- publicvoidZip(stringzipedFileName,intzipLevel,paramsstring[]fileOrDirectory)
- {
- if(fileOrDirectory==null)
- return;
- elseif(fileOrDirectory.Length<1)
- return;
- else
- {
- stringstr=fileOrDirectory[0];
- if(str.EndsWith("//"))
- str=str.Substring(0,str.Length-1);
- str=str.Substring(0,str.LastIndexOf("//"));
- Zip(zipedFileName,str,zipLevel,fileOrDirectory);
- }
- }
- ///<summary>
- ///压缩文件
- ///</summary>
- ///<paramname="zipedFileName">压缩后的文件</param>
- ///<paramname="zipLevel">压缩的级别</param>
- ///<paramname="currentDirectory">当前所处目录</param>
- ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
- publicvoidZip(stringzipedFileName,stringcurrentDirectory,intzipLevel,paramsstring[]fileOrDirectory)
- {
- ArrayListAllFiles=newArrayList();
- //获取所有文件
- if(fileOrDirectory!=null)
- {
- for(inti=0;i<fileOrDirectory.Length;i++)
- {
- if(File.Exists(fileOrDirectory[i]))
- AllFiles.Add(fileOrDirectory[i]);
- elseif(Directory.Exists(fileOrDirectory[i]))
- GetDirectoryFile(fileOrDirectory[i],AllFiles);
- }
- }
- if(AllFiles.Count<1)
- return;
- ZipOutputStreamzipedStream=newZipOutputStream(File.Create(zipedFileName));
- zipedStream.SetLevel(zipLevel);
- for(inti=0;i<AllFiles.Count;i++)
- {
- stringfile=AllFiles[i].ToString();
- FileStreamfs;
- //打开要压缩的文件
- try
- {
- fs=File.OpenRead(file);
- }
- catch
- {
- continue;
- }
- try
- {
- byte[]buffer=newbyte[fs.Length];
- fs.Read(buffer,0,buffer.Length);
- //新建一个entry
- stringfileName=file.Replace(currentDirectory,"");
- if(fileName.StartsWith("//"))
- fileName=fileName.Substring(1);
- ZipEntryentry=newZipEntry(fileName);
- entry.DateTime=DateTime.Now;
- //保存到zip流
- fs.Close();
- zipedStream.PutNextEntry(entry);
- zipedStream.Write(buffer,0,buffer.Length);
- }
- catch
- {
- }
- finally
- {
- fs.Close();
- fs.Dispose();
- }
- }
- zipedStream.Finish();
- zipedStream.Close();
- }
- ///<summary>
- ///压缩文件夹
- ///</summary>
- ///<paramname="curretnDirectory">当前所在的文件夹</param>
- publicvoidZipDirectory(stringcurretnDirectory)
- {
- if(curretnDirectory==null)
- return;
- stringdir=curretnDirectory;
- if(dir.EndsWith("//"))
- dir=dir.Substring(0,dir.Length-1);
- stringfile=dir.Substring(dir.LastIndexOf("//")+1)+".zip";
- dir+="//"+file;
- Zip(dir,6,curretnDirectory);
- }
- ///<summary>
- ///压缩文件夹
- ///</summary>
- ///<paramname="curretnDirectory">当前所在的文件夹</param>
- publicvoidZipDirectory(stringcurretnDirectory,intzipLevel)
- {
- if(curretnDirectory==null)
- return;
- stringdir=curretnDirectory;
- if(dir.EndsWith("//"))
- dir=dir.Substring(0,dir.Length-1);
- dir+=".zip";
- Zip(dir,zipLevel,curretnDirectory);
- }
- //递归获取一个目录下的所有文件
- privatevoidGetDirectoryFile(stringparentDirectory,ArrayListtoStore)
- {
- string[]files=Directory.GetFiles(parentDirectory);
- for(inti=0;i<files.Length;i++)
- toStore.Add(files[i]);
- string[]directorys=Directory.GetDirectories(parentDirectory);
- for(inti=0;i<directorys.Length;i++)
- GetDirectoryFile(directorys[i],toStore);
- }
- ///<summary>
- ///解压文件
- ///<paramname="type">解压类型</param>
- ///<paramname="zipFile">要解压的文件</param>
- publicvoidUnZip(UnzipTypetype,paramsstring[]zipFile)
- {
- ZipInputStreamzipStream;
- ZipEntryentry;
- for(inti=0;i<zipFile.Length;i++)
- {
- zipStream=newZipInputStream(File.OpenRead(zipFile[i]));
- //获取目录名,并创建该目录
- stringdirectoryName="";
- if(type==UnzipType.ToNewDirctory)
- directoryName=zipFile[i].Substring(0,zipFile[i].LastIndexOf("."));
- else
- directoryName=zipFile[i].Substring(0,zipFile[i].LastIndexOf("//"));
- if(!Directory.Exists(directoryName))
- Directory.CreateDirectory(directoryName);
- //读出每一个文件
- while((entry=zipStream.GetNextEntry())!=null)
- {
- //获取文件名
- stringfileName=entry.Name;
- if(directoryName.EndsWith("//"))
- fileName=directoryName+fileName;
- else
- fileName=directoryName+"//"+fileName;
- if(fileName==String.Empty)
- continue;
- //创建一个文件
- if(!Directory.Exists(Path.GetDirectoryName(fileName)))
- Directory.CreateDirectory(Path.GetDirectoryName(fileName));
- FileStreamstreamWriter=File.Create(fileName);
- //写入文件
- intsize=2048;
- byte[]data=newbyte[2048];
- while(true)
- {
- size=zipStream.Read(data,0,data.Length);
- if(size>0)
- {
- streamWriter.Write(data,0,size);
- }
- else
- {
- break;
- }
- }
- streamWriter.Close();
- }
- zipStream.Close();
- }
- }
- ///<summary>
- ///解压文件
- ///<paramname="zipFile">要解压的文件,默认解压到新文件夹,每个文件对应生成一个文件夹</param>
- publicvoidUnZip(paramsstring[]zipFile)
- {
- UnZip(UnzipType.ToNewDirctory,zipFile);
- }
用SharpZip解压/压缩文件
最新推荐文章于 2025-05-05 21:39:37 发布