PureBasic
PureBasic
Unzip a ZIP Entry Directly into a BinData Object Using ZipEntry.UnzipToBd
See more Zip Examples
This example demonstrates how to use the ZipEntry.UnzipToBd method to inflate a ZIP entry directly into a BinData object.
The entry contents are uncompressed entirely in memory without creating a file on disk.
This is useful when:
- Processing ZIP entry data entirely in memory
- Avoiding temporary filesystem files
- Working with binary files such as images, PDFs, or certificates
- Passing uncompressed ZIP data directly to other APIs
The example opens a ZIP archive, locates a PDF entry, inflates it into a BinData object, and then writes the uncompressed bytes to a new file.
Suppose the ZIP archive contains:
docs/report.pdf The entry is uncompressed directly into memory before optionally being saved to:
qa_output/report.pdf
Chilkat PureBasic Downloads
IncludeFile "CkZipEntry.pb"
IncludeFile "CkZip.pb"
IncludeFile "CkBinData.pb"
Procedure ChilkatExample()
success.i = 0
zip.i = CkZip::ckCreate()
If zip.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Open an existing ZIP archive.
success = CkZip::ckOpenZip(zip,"qa_data/zips/documents.zip")
If success = 0
Debug CkZip::ckLastErrorText(zip)
CkZip::ckDispose(zip)
ProcedureReturn
EndIf
; Locate the PDF entry within the ZIP archive.
entry.i = CkZipEntry::ckCreate()
If entry.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkZip::ckEntryOf(zip,"docs/report.pdf",entry)
If success = 0
Debug "ZIP entry not found."
CkZip::ckCloseZip(zip)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
ProcedureReturn
EndIf
; ------------------------------------------------------------
; Inflate the ZIP entry directly into a BinData object.
;
; The uncompressed bytes are stored entirely in memory.
;
pdfData.i = CkBinData::ckCreate()
If pdfData.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkZipEntry::ckUnzipToBd(entry,pdfData)
If success = 0
Debug CkZipEntry::ckLastErrorText(entry)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
CkBinData::ckDispose(pdfData)
ProcedureReturn
EndIf
Debug "Uncompressed size = " + Str(CkBinData::ckNumBytes(pdfData))
Debug ""
; ------------------------------------------------------------
; Optionally save the uncompressed bytes to a file.
;
success = CkBinData::ckWriteFile(pdfData,"qa_output/report.pdf")
If success = 0
Debug CkBinData::ckLastErrorText(pdfData)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
CkBinData::ckDispose(pdfData)
ProcedureReturn
EndIf
CkZip::ckCloseZip(zip)
Debug "PDF extracted successfully."
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
CkBinData::ckDispose(pdfData)
ProcedureReturn
EndProcedure