前段时间在网上找到了一段文件压缩的代码(在google或者baidu里搜索‘一个优化后的压缩算法’就能看到很多),本来使用得挺好,但是最近却发现在压缩某个文件再解开就出错。本人水平实在有限,请大家帮忙,多多感激

解决方案 »

  1.   

    待压缩的文件在 http://202.99.99.42/read/frmfcus.frx 压缩算法的代码很长我就不贴了
      

  2.   

    原創:vb6中用zlib.dll实现压缩/解压缩字节数组
    http://www.chenoe.com/blog/article.asp?id=2046转贴请注明出处作者:塞北雪貂Option Explicit
    'Declares
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function Compress Lib "zlibwapi.dll" Alias "compress" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long
    Private Declare Function uncompress Lib "zlibwapi.dll" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As LongPrivate Const OFFSET As Long = &H8'压缩数组
    Public Function CompressByte(ByteArray() As Byte) As Boolean
    Dim BufferSize As Long
    Dim TempBuffer() As Byte
    'Create a buffer to hold the compressed data
    BufferSize = UBound(ByteArray) + 1
    BufferSize = BufferSize + (BufferSize * 0.01) + 12
    ReDim TempBuffer(BufferSize)'Compress byte array (data)
    CompressByte = (Compress(TempBuffer(0), BufferSize, ByteArray(0), UBound(ByteArray) + 1) = 0)'Add the size of the original data
    Call CopyMemory(ByteArray(0), CLng(UBound(ByteArray) + 1), OFFSET)'Remove redundant data
    ReDim Preserve ByteArray(0 To BufferSize + OFFSET - 1)
    CopyMemory ByteArray(OFFSET), TempBuffer(0), BufferSize
    End Function'解压缩数组
    Public Function UnCompressByte(ByteArray() As Byte) As Boolean
    Dim origLen As Long
    Dim BufferSize As Long
    Dim TempBuffer() As Byte
    'Get the original size
    Call CopyMemory(OrigLen, ByteArray(0), OFFSET)'Create a buffer to hold the uncompressed data
    BufferSize = origLen
    BufferSize = BufferSize + (BufferSize * 0.01) + 12
    ReDim TempBuffer(BufferSize)'Decompress data
    UnCompressByte = (uncompress(TempBuffer(0), BufferSize, ByteArray(OFFSET), UBound(ByteArray) - OFFSET + 1) = 0)'Remove redundant data
    ReDim Preserve ByteArray(0 To BufferSize - 1)
    CopyMemory ByteArray(0), TempBuffer(0), BufferSize
    End Function
      

  3.   

    see 
    http://blog.csdn.net/homezj
      

  4.   

    同意二楼的,把winrar下的DOS版rar放到自定义资源中,要用的时候释放出来。rar.txt中有详细的命令说明。
      

  5.   

    to  viena() 
    就是小吉优化的那个啊...,原版的超级慢,现在没见过那个小吉了。还有没有人能帮忙看看啊 多谢多谢啦
      

  6.   

    to 塞北雪貂:
    你的这个也很不错,不过能问你下 zlib.dll 是系统自带的嘛...
      

  7.   

    另外,该dll的效率非常高,并且有很高的压缩比。
      

  8.   

    用这个动态连接库吧,很好用的,免费的,没有任何限制。wfZip 文件压缩链接库 v1.3 (免费)
    http://www.wfsoft.com/middleware_info.asp?id=16