有没有办法用另一个库解压缩DynaZip Max文件? FE DotNetZip

我有一个数据库,我们使用以下代码存储使用DynaZip Max Secure压缩的pdf文件:

MemoryStream msIN = new System.IO.MemoryStream(); //Input MemoryStream MemoryStream msZip = new System.IO.MemoryStream(); //Compressed MemoryStream BinaryReader objBinaryReader; BinaryWriter objBinaryWriter; public MemoryStream CompressStream(byte[] vbuf) { System.IO.BinaryWriter bw = new System.IO.BinaryWriter(msIN); bw.Write(vbuf); CDZipSNET dz1 = new CDZipSNET(); dz1.ZipMemToMemCallback += new CDZipSNET.OnZipMemToMemCallback(this.ZipMemToMemCallback_event); dz1.ActionDZ = CDZipSNET.DZACTION.ZIP_MEMTOMEM; return msZip; } 

这是ZipMemToMemCallback_event代码:

 public void ZipMemToMemCallback_event(CDZipSNET.MEMTOMEMACTION lAction,ref byte[] lpMemBuf,ref uint pdwSize,uint dwTotalReadL,uint dwTotalReadH,uint dwTotalWrittenL,uint dwTotalWrittenH,ref CDZipSNET.MEMTOMEMRESPONSE plRet) { int bytesToRead; switch(lAction) { case CDZipSNET.MEMTOMEMACTION.MEM_READ_DATA: if((dwTotalReadL == 0) && (dwTotalReadH == 0)) { msIN.Seek(0, System.IO.SeekOrigin.Begin); objBinaryReader = new System.IO.BinaryReader(msIN); } try { bytesToRead = (int)(objBinaryReader.BaseStream.Length - dwTotalReadL); if(bytesToRead > pdwSize) { bytesToRead = (int)pdwSize; plRet = CDZipSNET.MEMTOMEMRESPONSE.MEM_CONTINUE; } else { plRet = CDZipSNET.MEMTOMEMRESPONSE.MEM_DONE; } pdwSize = (uint)bytesToRead; if(bytesToRead > 0) { objBinaryReader.Read(lpMemBuf, 0, bytesToRead); } } catch { plRet = CDZipSNET.MEMTOMEMRESPONSE.MEM_ERROR; } break; case CDZipSNET.MEMTOMEMACTION.MEM_WRITE_DATA: if((dwTotalWrittenL == 0) && (dwTotalWrittenH == 0)) { objBinaryWriter = new System.IO.BinaryWriter(msZip); } try { objBinaryWriter.Write(lpMemBuf, 0, (int)pdwSize); plRet = CDZipSNET.MEMTOMEMRESPONSE.MEM_CONTINUE; } catch (System.Exception) { plRet = CDZipSNET.MEMTOMEMRESPONSE.MEM_ERROR; } break; default: plRet = CDZipSNET.MEMTOMEMRESPONSE.MEM_ERROR; break; } } 

我将提供任何其他必要的东西来解决这个谜题,我尝试过常规Zip解压缩,Zlib,Gzip无济于事。 我将不胜感激任何帮助。 谢谢。

编辑:问题是DinaZip是一个固定的,已停产的库,没有发布它的公司的帮助或故障排除,我已经承诺解压缩一堆以前使用该库压缩的文件(使用代码avobe)和我不再有可用于解压缩的库,我想知道是否有人知道如何使用其他库或方法解压缩这些文件。

此代码来自https://zlibnet.codeplex.com ,它可以解压缩未加密的DynaZip流:

 public static class DynazipCompressor { const int DZ_DEFLATE_POS = 46; public static bool IsDynazip(byte[] source) { return source.Length >= 4 && BitConverter.ToInt32(source, 0) == 0x02014b50; } public static byte[] DeCompress(byte[] source) { if (!IsDynazip(source)) throw new InvalidDataException("not dynazip header"); using (MemoryStream srcStream = new MemoryStream(source, DZ_DEFLATE_POS, source.Length - DZ_DEFLATE_POS)) using (MemoryStream dstStream = DeCompress(srcStream)) return dstStream.ToArray(); } private static MemoryStream DeCompress(Stream source) { MemoryStream dest = new MemoryStream(); DeCompress(source, dest); dest.Position = 0; return dest; } private static void DeCompress(Stream source, Stream dest) { using (DeflateStream zsSource = new DeflateStream(source, CompressionMode.Decompress, true)) { zsSource.CopyTo(dest); } } } 

DynaZip流只是一个带有PKZIP标头的DeflateStream,所以这段代码只是跳过标题。