PureZIP ne peut pas décompresser un fichier en mémoire, car aucune fonction de
ZLIB (la librairie que j'utilise) ne le permet à ma connaissance.
Pour ce genre de choses, j'utilise
PureLZMA.
Les fonctions de PureLZMA-Packer-Mem (incluses dans PureLZMA) permettent de lire des archives PureLZMA incluses dans des datasections.
Code : Tout sélectionner
;
; PureLZMA - Packer - Mem Extension test
;
EncryptionKey.s = ""
;
; If PureLZMA_Archive_Create("c:\purebasic\program\MemArchiveTest.arc")
; PureLZMA_Archive_Compress("c:\PureBasic\Program\PureLZMA_Test.pb", 1, EncryptionKey)
; PureLZMA_Archive_Compress("c:\PureBasic\Program\PureLZMA_Test2.pb", 1, EncryptionKey)
; PureLZMA_Archive_Compress("c:\PureBasic\Program\PureLZMA_Test3.pb", 0, EncryptionKey)
; PureLZMA_Archive_Compress("c:\PureBasic\Program\PureLZMA_Test4.pb", -1, EncryptionKey)
; PureLZMA_Archive_Close()
; EndIf
; End
;
DataSection
ArchiveBufferStart:
IncludeBinary "c:\purebasic\program\MemArchiveTest.arc"
ArchiveBufferEnd:
EndDataSection
;
If PureLZMA_MemArchive_Read(?ArchiveBufferStart, ?ArchiveBufferEnd - ?ArchiveBufferStart)
Status = PureLZMA_MemArchive_FindFirst()
;
While Status
;
If PureLZMA_MemArchive_GetArchiveInfo(@ArchiveInfo.LZMA_ArchiveInfo)
Debug "----------------"
Debug "CRCUnpacked = $" + RSet(Hex(ArchiveInfo\CRCUnpacked, #PB_Long), 8, "0")
Debug "CRCPacked = $" + RSet(Hex(ArchiveInfo\CRCPacked, #PB_Long), 8, "0")
Debug "CRCPacked CALC = $" + RSet(Hex(PureLZMA_MemArchive_GetCRC(), #PB_Long), 8, "0")
Debug "LengthUnpacked = " + Str(ArchiveInfo\LengthUnpacked)
Debug "LengthPacked = " + Str(ArchiveInfo\LengthPacked) + " (" + StrF(ArchiveInfo\LengthPacked / ArchiveInfo\LengthUnpacked * 100, 2) + "% of original)"
Debug "LZMAFlags = " + Str(ArchiveInfo\LZMAFlags)
Debug "FileAttributes = $" + Hex(ArchiveInfo\FileAttributes)
Debug "Filename = '" + ArchiveInfo\Filename + "'"
EndIf
;
Status = PureLZMA_MemArchive_FindNext()
;
Wend
;
PureLZMA_MemArchive_Close()
EndIf