知识大全 asp.net 压缩解压缩zip文件

Posted 路径

篇首语:笨人先起身,笨鸟早出林。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 asp.net 压缩解压缩zip文件相关的知识,希望对你有一定的参考价值。

  [csharp] view plaincopyprint?

  using System using System IO using System Diagnostics using Microsoft Win

  using ICSharpCode SharpZipLib Checksums using ICSharpCode SharpZipLib Zip

  ///压缩 解压缩类namespace DotNet Utilities public class SharpZip public SharpZip()

  

  /// <summary> /// 压缩/// </summary> /// <param name= filename > 压缩后的文件名(包含物理路径)</param> /// <param name= directory >待压缩的文件夹(包含物理路径)</param> public static void PackFiles(string filename string directory)

   try FastZip fz = new FastZip() fz CreateEmptyDirectories = true fz CreateZip(filename directory true ) fz = null catch (Exception)

   throw

  /// <summary> /// 解压缩/// </summary> /// <param name= file >待解压文件名(包含物理路径)</param> /// <param name= dir > 解压到哪个目录中(包含物理路径)</param> public static bool UnpackFiles(string file string dir)

   try if (!Directory Exists(dir))

   Directory CreateDirectory(dir) ZipInputStream s = new ZipInputStream(File OpenRead(file)) ZipEntry theEntry while ((theEntry = s GetNextEntry()) != null)

   string directoryName = Path GetDirectoryName(theEntry Name) string fileName = Path GetFileName(theEntry Name) if (directoryName != String Empty)

   Directory CreateDirectory(dir + directoryName) if (fileName != String Empty)

   FileStream streamWriter = File Create(dir + theEntry Name) int size = byte[] data = new byte[ ] while (true)

   size = s Read(data data Length) if (size > )

   streamWriter Write(data size) else break streamWriter Close() s Close() return true catch (Exception)

   throw

  public class ClassZip #region 私有方法/// <summary> /// 递归压缩文件夹方法/// </summary> private static bool ZipFileDictory(string FolderToZip ZipOutputStream s string ParentFolderName)

   bool res = true string[] folders filenames ZipEntry entry = null FileStream fs = null Crc crc = new Crc () try entry = new ZipEntry(Path Combine(ParentFolderName Path GetFileName(FolderToZip) + / )) s PutNextEntry(entry) s Flush() filenames = Directory GetFiles(FolderToZip) foreach (string file in filenames)

   fs = File OpenRead(file) byte[] buffer = new byte[fs Length] fs Read(buffer buffer Length) entry = new ZipEntry(Path Combine(ParentFolderName Path GetFileName(FolderToZip) + / + Path GetFileName(file))) 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 buffer Length) catch res = false finally if (fs != null)

   fs Close() fs = null if (entry != null)

   entry = null GC Collect() GC Collect( ) folders = Directory GetDirectories(FolderToZip) foreach (string folder in folders)

   if (!ZipFileDictory(folder s Path Combine(ParentFolderName Path GetFileName(FolderToZip))))

   return false return res

  /// <summary> /// 压缩目录/// </summary> /// <param name= FolderToZip >待压缩的文件夹 全路径格式</param> /// <param name= ZipedFile >压缩后的文件名 全路径格式</param> private static bool ZipFileDictory(string FolderToZip string ZipedFile int level)

   bool res if (!Directory Exists(FolderToZip))

   return false ZipOutputStream s = new ZipOutputStream(File Create(ZipedFile)) s SetLevel(level) res = ZipFileDictory(FolderToZip s ) s Finish() s Close() return res

  /// <summary> /// 压缩文件/// </summary> /// <param name= FileToZip >要进行压缩的文件名</param> /// <param name= ZipedFile >压缩后生成的压缩文件名</param> private static bool ZipFile(string FileToZip string ZipedFile int level)

   if (!File Exists(FileToZip))

   throw new System IO FileNotFoundException( 指定要压缩的文件 + FileToZip + 不存在! ) FileStream ZipFile = null ZipOutputStream ZipStream = null ZipEntry ZipEntry = null bool res = true try ZipFile = File OpenRead(FileToZip) byte[] buffer = new byte[ZipFile Length] ZipFile Read(buffer buffer Length) ZipFile Close()

  ZipFile = File Create(ZipedFile) ZipStream = new ZipOutputStream(ZipFile) ZipEntry = new ZipEntry(Path GetFileName(FileToZip)) ZipStream PutNextEntry(ZipEntry) ZipStream SetLevel(level)

  ZipStream Write(buffer buffer Length) catch res = false finally if (ZipEntry != null)

   ZipEntry = null if (ZipStream != null)

   ZipStream Finish() ZipStream Close() if (ZipFile != null)

   ZipFile Close() ZipFile = null GC Collect() GC Collect( ) return res #endregion

  /// <summary> /// 压缩/// </summary> /// <param name= FileToZip >待压缩的文件目录</param> /// <param name= ZipedFile >生成的目标文件</param> /// <param name= level > </param> public static bool Zip(String FileToZip String ZipedFile int level)

   if (Directory Exists(FileToZip))

   return ZipFileDictory(FileToZip ZipedFile level) else if (File Exists(FileToZip))

   return ZipFile(FileToZip ZipedFile level) else return false

  /// <summary> /// 解压/// </summary> /// <param name= FileToUpZip >待解压的文件</param> /// <param name= ZipedFolder >解压目标存放目录</param> public static void UnZip(string FileToUpZip string ZipedFolder)

   if (!File Exists(FileToUpZip))

   return if (!Directory Exists(ZipedFolder))

   Directory CreateDirectory(ZipedFolder) ZipInputStream s = null ZipEntry theEntry = null string fileName FileStream streamWriter = null try s = new ZipInputStream(File OpenRead(FileToUpZip)) while ((theEntry = s GetNextEntry()) != null)

   if (theEntry Name != String Empty)

   fileName = Path Combine(ZipedFolder theEntry Name) if (fileName EndsWith( / ) || fileName EndsWith( \\\\ ))

   Directory CreateDirectory(fileName) continue streamWriter = File Create(fileName) int size = byte[] data = new byte[ ] while (true)

   size = s Read(data data Length) if (size > )

   streamWriter Write(data size) else break finally if (streamWriter != null)

   streamWriter Close() streamWriter = null if (theEntry != null)

   theEntry = null if (s != null)

   s Close() s = null GC Collect() GC Collect( )

  public class ZipHelper #region 私有变量String the_rar RegistryKey the_Reg Object the_Obj String the_Info ProcessStartInfo the_StartInfo Process the_Process #endregion

  /// <summary> /// 压缩/// </summary> /// <param name= zipname >要解压的文件名</param> /// <param name= zippath >要压缩的文件目录</param> /// <param name= dirpath >初始目录</param> public void EnZip(string zipname string zippath string dirpath)

   try the_Reg = Registry ClassesRoot OpenSubKey(@ Applications\\WinRAR exe\\Shell\\Open\\Command ) the_Obj = the_Reg GetValue( ) the_rar = the_Obj ToString() the_Reg Close() the_rar = the_rar Substring( the_rar Length ) the_Info = a + zipname + + zippath the_StartInfo = new ProcessStartInfo() the_StartInfo FileName = the_rar the_StartInfo Arguments = the_Info the_StartInfo WindowStyle = ProcessWindowStyle Hidden the_StartInfo WorkingDirectory = dirpath the_Process = new Process() the_Process StartInfo = the_StartInfo the_Process Start() catch (Exception ex)

   throw new Exception(ex Message)

  /// <summary> /// 解压缩/// </summary> /// <param name= zipname >要解压的文件名</param> /// <param name= zippath >要解压的文件路径</param> public void DeZip(string zipname string zippath)

   try the_Reg = Registry ClassesRoot OpenSubKey(@ Applications\\WinRar exe\\Shell\\Open\\Command ) the_Obj = the_Reg GetValue( ) the_rar = the_Obj ToString() the_Reg Close() the_rar = the_rar Substring( the_rar Length ) the_Info = X + zipname + + zippath the_StartInfo = new ProcessStartInfo() the_StartInfo FileName = the_rar the_StartInfo Arguments = the_Info the_StartInfo WindowStyle = ProcessWindowStyle Hidden the_Process = new Process() the_Process StartInfo = the_StartInfo the_Process Start() catch (Exception ex)

cha138/Article/program/net/201311/12665

相关参考