c# – 有没有办法用另一个库解压缩DynaZip Max文件? F.E. DotNetZip

c# – 有没有办法用另一个库解压缩DynaZip Max文件? F.E. DotNetZip,第1张

概述我有一个数据库,我们使用以下代码存储使用DynaZip Max Secure压缩的pdf文件: MemoryStream msIN = new System.IO.MemoryStream(); //Input MemoryStreamMemoryStream msZip = new System.IO.MemoryStream(); //Compressed MemoryStreamB 我有一个数据库,我们使用以下代码存储使用DynaZip Max Secure压缩的pdf文件:
MemoryStream msIN = new System.IO.MemoryStream();   //input MemoryStreamMemoryStream msZip = new System.IO.MemoryStream();  //Compressed MemoryStreamBinaryReader 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,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,(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,因此这段代码只是跳过标题.

总结

以上是内存溢出为你收集整理的c# – 有没有办法用另一个库解压缩DynaZip Max文件? F.E. DotNetZip全部内容,希望文章能够帮你解决c# – 有没有办法用另一个库解压缩DynaZip Max文件? F.E. DotNetZip所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: https://outofmemory.cn/langs/1248023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存