asp.net 压缩解压缩zip文件

asp.net 压缩解压缩zip文件,第1张

[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)

lishixinzhi/Article/program/net/201311/12665

解压的步骤如下:

1.首先找到一个EXE文件来看下,用一般的解压软件根本没有解压的这个选项。

2.看来这条路是走不通的,于是只有寻找其他的软件来解决这个问题了,启动ArcThemALL软件。

3、选择第二个选项,提取。

4.再选择添加需要解压的文件夹。

5.这款软件有个不好的地方就是只能打开文件夹,而不能再进一步打开文件夹里面的文件,因此添加进来后,要注意选择文件夹里面的EXE文件,然后单击开始命令就OK了。

6.经过一分钟左右的样子,基本上就可以完成了(需要看文件大小和机子的配置)。

.NET自带类支持GZIP算法压缩/解压流。

System.IO.Compression.GZipStream

这个类不能直接用来解压.zip文件,看看老外怎么说的

It is possible, with extra code, to produce or read a zip file, with the help of GZipStream, but it is not trivial.

If you want to read or write Zip files, the best bet is to use a third party library, like DotNetZip. This library is free, and enables your applications to read or write zip files that contain multiple compressed files. These are standard zip files that can be opened by Windows Explorer, or WinZip, or other zip tools. It's simple to use. It works with VB, or c#, or any .NET language

总之,如果你要解压ZIP文件,还是用第三方库吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7940194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存