2013-03-28 13 views
6

Sanırım ile sıkıştırılmış pdf dosyalarını depolandığı bir veri tabanı var DynaZip Max Güvenli, aşağıdaki kodu kullanarak:DynaZip Max dosyasını başka bir kitaplıkla açmanın bir yolu var mı? 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; 
} 

Ve bu ZipMemToMemCallback_event kodudur:

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; 
    } 
} 

Hiçbir şey sağlayacaktır Bu bilmeceyi anlayabilmek için gerekli olan, düzenli Zip sıkıştırmayı, Zlib, Gzip'i boşuna denedim. Her türlü yardıma minnettar olurum. Teşekkür ederim.

Düzenleme: sorun DinaZip bir propietary, durdurulan kütüphane, ben daha önce bu kütüphaneyi kullanarak sıkıştırılmıştır dosyaların bir demet sıkıştırması commisioned ediyorum bunu piyasaya şirket tarafından hiçbir yardım ya da sorun giderme, olmasıdır (kod ile birlikte) ve kütüphanede dekompresyon için artık mevcut değil, bu dosyayı başka bir kütüphane veya yöntem kullanarak açmak için herhangi bir yol biliyorsa merak ediyorum.

+0

Hata hangi satırı yapar ve hata mesajını nedir? –

+0

@JeremyThompson Kod saklamak, DinaZip Max Secure kütüphanesini kullanarak dosyaları sıkıştırmak için kullanıldı. Onları açmaya ihtiyacım var, DotNetZip kütüphanesinin ZlibStream ve ZipFile işlevlerini sıkıştırmak için kullanmayı denedim, ancak geçerli bir Zip veya Zlib dosyası olmadığını söyleyen bir hata atıyor, bu tür dosya. –

+0

Juust, zaten bildiğiniz bir şeyi belirtmek istedi ancak diğerleri şunları yapamaz: şifrelemenin dynazip uygulaması, diğer büyük kütüphanelerden herhangi biriyle _not uyumludur. Dynazip ile şifrelenmiş bir arşivi açmak için dynazip kullanmak için _have_ anlamına gelir. Hayır. Diğer. Seçeneği. –

cevap

9

Bu kod https://zlibnet.codeplex.com gelen ve şifrelenmemiş DynaZip akışları sıkıştırmasını:

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); 
     } 
    } 
} 

A DynaZip akışı sadece PKZIP başlığıyla bir DeflateStream, bu nedenle bu kod sadece başlığı atlama.

+0

Bu, şifrelenmediği yerlerde sakladığımız neyse ki bana yardımcı oldu. Teşekkür ederiz –

+0

Veriler şifreli depolanmışsa ne olacak? – MoonKnight

+0

Killercam: Bilmiyorum. Dynazip Secure Dynazip Max ile şifreli mi? – osexpert

İlgili konular