【发布时间】:2013-03-18 07:24:05
【问题描述】:
我有一个数据库,我们使用以下代码存储了使用 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)并且我不再有可用于解压缩的库,我想知道是否有人知道任何方法可以使用其他库或方法来解压这些文件。
【问题讨论】:
-
错误出现在哪一行,错误信息是什么?
-
@JeremyThompson 代码 avobe 用于压缩文件,使用 DinaZip Max Secure 库。我需要解压它们,我尝试使用 DotNetZip 库的 ZlibStream 和 ZipFile 函数来解压它们,但是它抛出一个错误,告诉我它不是一个有效的 Zip 或 Zlib 文件,我想知道是否有人知道如何解压这种文件。
-
只是想指出一些您已经知道但其他人可能不知道的事情:加密的 dynazip 实现与任何其他主要库不兼容。这意味着要解压缩使用 dynazip 加密的存档,您必须使用 dynazip。没有其他。选项。
标签: c# zip gzip zlib dotnetzip