Mam bazę danych, w której przechowywane pliki pdf skompresowane DynaZip Max Secure, stosując następujący kod:Czy istnieje sposób na dekompresję pliku DynaZip Max do innej biblioteki? FE DotNetZip
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;
}
i to jest kod 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;
}
}
dam nic w przeciwnym razie, aby odświeżyć tę zagadkę, Ive próbował bez problemu dekompresować Zip, Gliip, Gzip. Będę wdzięczny za każdą pomoc. Dziękuję Ci.
Edit: Problemem jest to, że DinaZip jest propietary, odstawić biblioteka, bez pomocy i rozwiązywania problemów przez spółkę że zwolniony, mam zlecone do dekompresji kilka plików, które zostały uprzednio skompresowany przy użyciu tej biblioteki (z kodem avobe) i nie mam już biblioteki dostępnej do dekompresji, zastanawiam się, czy ktokolwiek zna jakikolwiek sposób na dekompresję tych plików może używając innej biblioteki lub metody.
W której linii występuje błąd i jaki jest komunikat o błędzie? –
@JeremyThompson Kod avobe został użyty do kompresowania plików przy użyciu biblioteki DinaZip Max Secure. Muszę je rozpakować, próbowałem użyć funkcji ZlibStream i ZipFile biblioteki DotNetZip, aby je rozpakować, ale generuje błąd informujący, że nie jest to prawidłowy plik Zip lub Zlib. Zastanawiam się, czy ktoś wie, jak rozpakować ten rodzaj plik. –
Juust chciał wskazać na coś, co już znasz, ale inni nie mogą: implementacja szyfrowania dynazip nie jest zgodna z żadną z innych głównych bibliotek. co oznacza, że aby rozpakować archiwum zaszyfrowane dynazipem, musisz mieć dynazip. Nikt inny. Opcja. –