欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

怎么样使用组件多类型文件解压缩组件SharpZipLib

来源:本站整理 作者:佚名 时间:2016-12-27 TAG: 我要投稿

前面介绍了六种.NET组件,其中有一种组件是写文件的压缩和解压,现在介绍另一种文件的解压缩组件SharpZipLib。在这个组件介绍系列中,只为简单的介绍组件的背景和简单的应用,读者在阅读时可以结合官网的相关介绍和在本地实际操作。
相关的组件功能非常强大,在笔者的介绍中只是提及到简单的应用,需要了解更多的操作和特性,可以根据官网介绍,或者查看DLL文件的相关类和方法,以此来扩展相关的业务需要。
SharpZipLib是一个完全在C#中为.NET平台编写的Zip,GZip,Tar和BZip2库。
一.SharpZipLib组件概述:
ziplib(SharpZipLib,以前的NZipLib)是一个完全在C#为.NET平台编写的Zip,GZip,Tar和BZip2库。它实现为一个程序集(可安装在GAC中),因此可以轻松地集成到其他项目(任何.NET语言)中。 #ziplib的创建者这样说:“我已经将zip库移植到C#,因为我需要gzip / zip压缩,我不想使用libzip.dll或类似的东西我想要的所有在纯C#“。
SharpZipLib官网提供的下载操作:.NET 1.1,.NET 2.0(3.5,4.0),.NET CF 1.0,.NET CF 2.0的装配:下载237 KB,源代码和示例下载708 KB;源代码和示例下载708 KB;帮助文件下载1208 KB;
SharpZipLib是在GPL下发布,遵守开源协议。
二.SharpZipLib核心类和方法介绍:
以上简单的介绍了SharpZipLib组件的相关背景,现在具体看一下该组件的相关核心类和方法:


1.ZipOutputStream类PutNextEntry():
public void PutNextEntry(ZipEntry entry)
{
 bool hasCrc;
 if (entry == null)
 {
  throw new ArgumentNullException("entry");
 }
 if (this.entries == null)
 {
  throw new InvalidOperationException("ZipOutputStream was finished");
 }
 if (this.curEntry != null)
 {
  this.CloseEntry();
 }
 if (this.entries.Count == 0x7fffffff)
 {
  throw new ZipException("Too many entries for Zip file");
 }
 CompressionMethod compressionMethod = entry.CompressionMethod;
 int defaultCompressionLevel = this.defaultCompressionLevel;
 entry.Flags &= 0x800;
 this.patchEntryHeader = false;
 if (entry.Size == 0L)
 {
  entry.CompressedSize = entry.Size;
  entry.Crc = 0L;
  compressionMethod = CompressionMethod.Stored;
  hasCrc = true;
 }
 else
 {
  hasCrc = (entry.Size >= 0L) && entry.HasCrc;
  if (compressionMethod == CompressionMethod.Stored)
  {
   if (!hasCrc)
   {
    if (!base.CanPatchEntries)
    {
     compressionMethod = CompressionMethod.Deflated;
     defaultCompressionLevel = 0;
    }
   }
   else
   {
    entry.CompressedSize = entry.Size;
    hasCrc = entry.HasCrc;
   }
  }
 }
 if (!hasCrc)
 {
  if (!base.CanPatchEntries)
  {
   entry.Flags |= 8;
  }
  else
  {
   this.patchEntryHeader = true;
  }
 }
 if (base.Password != null)
 {
  entry.IsCrypted = true;
  if (entry.Crc  0L)
  {
   entry.Flags |= 8;
  }
 }
 entry.Offset = this.offset;
 entry.CompressionMethod = compressionMethod;
 this.curMethod = compressionMethod;
 this.sizePatchPos = -1L;
 if ((this.useZip64_ == UseZip64.On) || ((entry.Size  0L) && (this.useZip64_ == UseZip64.Dynamic)))
 {
  entry.ForceZip64();
 }
 this.WriteLeInt(0x4034b50);
 this.WriteLeShort(entry.Version);
 this.WriteLeShort(entry.Flags);
 this.WriteLeShort((byte) entry.CompressionMethodForHeader);
 this.WriteLeInt((int) entry.DosTime);
 if (hasCrc)
 {
  this.WriteLeInt((int) entry.Crc);
  if (entry.LocalHeaderRequiresZip64)
  {
   this.WriteLeInt(-1);
   this.WriteLeInt(-1);
  }
  else
  {
   this.WriteLeInt(entry.IsCrypted ? (((int) entry.CompressedSize) + 12) : ((int) entry.CompressedSize));
   this.WriteLeInt((int) entry.Size);
  }
 }
 else
 {
  if (this.patchEntryHeader)
  {
   this.crcPatchPos = base.baseOutputStream_.Position;
  }
  this.WriteLeInt(0);
  if (this.patchEntryHeader)
  {
   this.sizePatchPos = base.baseOutputStream_.Position;

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载