Sample code for 30+ languages & platforms
DataFlex

Unzip Files Matching a Pattern (such as *.xml)

See more Zip Examples

Example code to unzip Files Matching a Pattern (such as *.xml)

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Handle hoZip
    String sZipContentsXml
    Integer iCount
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This example works with the .zip located at http://www.example-code.com/data/test.zip

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // First, let's download the .zip
    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End
    Get ComDownload Of hoHttp "http://www.example-code.com/data/test.zip" "qa_test/test.zip" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatZip)) To hoZip
    If (Not(IsComObjectCreated(hoZip))) Begin
        Send CreateComObject of hoZip
    End

    Get ComOpenZip Of hoZip "qa_test/test.zip" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Show what's in the .zip by getting the directory as XML.
    Get ComGetDirectoryAsXML Of hoZip To sZipContentsXml
    Get ComLastMethodSuccess Of hoZip To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln sZipContentsXml

    // In this case, the contents of our .zip look like this:
    // <?xml version="1.0" encoding="utf-8" ?>
    // <zip_contents>
    //     <dir name="test">
    //         <dir name="abc">
    //             <dir name="123">
    //                 <file>ecc_public.pem</file>
    //                 <file>starfish.jpg</file>
    //             </dir>
    //             <file>comodo-certificates.pem</file>
    //             <file>pigs.xml</file>
    //         </dir>
    //         <file>COMODORSACertificationAuthority.crt</file>
    //         <file>hamlet.xml</file>
    //     </dir>
    // </zip_contents>

    // ------------------------------------------------------------------------
    // If we wish to unzip only .xml files, use "*.xml" for the pattern\
    // Unzip to the "qa_output" directory relative to our current working directory.
    // (You may unzip to an absolute path by passing an absolute path, such as "/someDir" or
    // "C:/someDir", etc.)
    // This will unzip only the .xml files.  The relative directory structure within
    // the .zip will be created in the local filesystem under the unzip directory
    // path passed in the first argument, which in this case is "qa_output".
    Get ComUnzipMatching Of hoZip "qa_output" "*.xml" True To iCount
    If (iCount < 0) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "unzipped " iCount " matching file(s)."

    // ------------------------------------------------------------------------
    // If we wish to unzip only files under the "123" directory, we can do this:
    Get ComUnzipMatching Of hoZip "qa_output2" "*/123/*" True To iCount
    If (iCount < 0) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "unzipped " iCount " matching file(s)."

    // ------------------------------------------------------------------------
    // If no asterisk character is used, then the match must be exact.
    // For example, to unzip "test/hamlet.xml" we must pass the exact path
    // as it is in the .zip.  We cannot just pass "hamlet.xml".
    Get ComUnzipMatching Of hoZip "qa_output3" "test/hamlet.xml" True To iCount
    If (iCount < 0) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "unzipped " iCount " matching file(s)."

    // ------------------------------------------------------------------------
    // If we want to unzip any file named "hamlet.xml" found in any sub-directory...
    Get ComUnzipMatching Of hoZip "qa_output4" "*/hamlet.xml" True To iCount
    If (iCount < 0) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "unzipped " iCount " matching file(s)."


End_Procedure