Sample code for 30+ languages & platforms
PureBasic

Unzip Some Files by Iterating over Entries

See more Zip Examples

Demonstrates how to unzip specific files by iterating over entries in a .zip.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkZipEntry.pb"
IncludeFile "CkZip.pb"
IncludeFile "CkStringBuilder.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    zip.i = CkZip::ckCreate()
    If zip.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Open a .zip containing:
    ; 
    ; a1.xml
    ; b1.xml
    ; c1.xml
    ; dir1/a2.xml
    ; dir1/c2.xml
    ; dir2/dir3/c3.xml

    ; We wish to unzip only a1.xml, b1.xml, and c1.xml
    success = CkZip::ckOpenZip(zip,"qa_data/zips/xml_files.zip")
    If success = 0
        Debug CkZip::ckLastErrorText(zip)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

    sbFilename.i = CkStringBuilder::ckCreate()
    If sbFilename.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    entry.i = CkZipEntry::ckCreate()
    If entry.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    numEntries.i = CkZip::ckNumEntries(zip)
    i.i = 0
    While i < numEntries
        CkZip::ckEntryAt(zip,i,entry)

        entryFilePath.s = CkZipEntry::ckFileName(entry)
        Debug entryFilePath

        If CkZipEntry::ckIsDirectory(entry) = 0
            CkStringBuilder::ckSetString(sbFilename,entryFilePath)
            If CkStringBuilder::ckContains(sbFilename,"/",0) = 0
                ; Does not contain "/"
                ; Unzip to the qa_output directory.
                success = CkZipEntry::ckExtract(entry,"qa_output")
                If success = 0
                    Debug "Failed to unzip " + entryFilePath
                Else
                    Debug "Unzipped " + entryFilePath
                EndIf

            EndIf

        EndIf

        i = i + 1
    Wend


    CkZip::ckDispose(zip)
    CkStringBuilder::ckDispose(sbFilename)
    CkZipEntry::ckDispose(entry)


    ProcedureReturn
EndProcedure