Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Zip Append Files and Entry TypeSee more Zip ExamplesDemonstrates appending files to a zip object for writing a .zip. Also explains the "entry type".
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Handle hoZip Variant vEntry Handle hoEntry String sZipPath Boolean iRecurse Boolean iSaveExtraPath Boolean iArchiveOnly Boolean iIncludeHidden Boolean iIncludeSystem Integer iCount Integer i Variant vETemp Handle hoETemp String sTemp1 Integer iTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatZip)) To hoZip If (Not(IsComObjectCreated(hoZip))) Begin Send CreateComObject of hoZip End Move "c:/temp/qa_output/out.zip" To sZipPath // Initialize the zip object with the path of the .zip to be created. Get ComNewZip Of hoZip sZipPath To iSuccess // Recursively append to the zip object the paths of the files and directories in a directory tree. // At this point we are not creating the .zip, nor are we reading the contents of the files. // We are simply appending references to the files and directories in the local filesystem // that will get processed when WriteZip is called. Move True To iRecurse Move False To iSaveExtraPath Move False To iArchiveOnly Move True To iIncludeHidden Move False To iIncludeSystem Get ComAppendFilesEx Of hoZip "c:/temp/files_to_zip" iRecurse iSaveExtraPath iArchiveOnly iIncludeHidden iIncludeSystem To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoZip To sTemp1 Showln sTemp1 Procedure_Return End // Note: We can iterate over the references to the files that will be processed when zipping: Get ComNumEntries Of hoZip To iCount Move 0 To i While (i < iCount) Get ComGetEntryByIndex Of hoZip i To vEntry If (IsComObject(vEntry)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoEntry Set pvComObject Of hoEntry To vEntry End Get ComFileName Of hoEntry To sTemp1 Get ComEntryType Of hoEntry To iTemp1 Showln sTemp1 " entryType = " iTemp1 Send Destroy of hoEntry Move (i + 1) To i Loop Showln "----" // Sample output for the above loop: // The entry type = 1, because these are entries that are references to files in the local filesystem // that are to be processed when the zip is written. // hamlet.xml entryType = 1 // hello.pdf entryType = 1 // ... // ... // Possible entry type values: // 0 - Mapped Entry: An entry in an existing Zip file. // 1 - File Entry: A file not yet in memory, but referenced. These entries are added by calling AppendFiles, AppendFilesEx, AppendOneFileOrDir, etc. // 2 - Data Entry: An entry containing uncompressed data from memory. These entries are added by calling AppendData, AppendString, etc. // 3 - Null Entry: An entry that no longer exists in the .zip. // 4 - New Directory Entry: A directory entry added by calling AppendNewDir. // The application can continue to add additional entries. // For example: Get ComAppendString Of hoZip "helloWorld.txt" "Hello World" To vETemp If (IsComObject(vETemp)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoETemp Set pvComObject Of hoETemp To vETemp End Send Destroy of hoETemp // Now let's have a look at what will get zipped when we write the zip: Get ComNumEntries Of hoZip To iCount Move 0 To i While (i < iCount) Get ComGetEntryByIndex Of hoZip i To vEntry If (IsComObject(vEntry)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoEntry Set pvComObject Of hoEntry To vEntry End Get ComFileName Of hoEntry To sTemp1 Get ComEntryType Of hoEntry To iTemp1 Showln sTemp1 " entryType = " iTemp1 Send Destroy of hoEntry Move (i + 1) To i Loop Showln "----" // You can see that "helloWorld.txt" is added. // Its entryType = 2, which means it is in-memory data (it is not a reference to a file in the local filesystem). // hamlet.xml entryType = 1 // hello.pdf entryType = 1 // ... // ... // helloWorld.txt entryType = 2 // ---------------------------------------------------------------------------- // Now we'll write the zip to a .zip file. Set ComFileName Of hoZip To sZipPath Get ComWriteZip Of hoZip To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoZip To sTemp1 Showln sTemp1 Procedure_Return End // Let's look again at the entries in the .zip Get ComNumEntries Of hoZip To iCount Move 0 To i While (i < iCount) Get ComGetEntryByIndex Of hoZip i To vEntry If (IsComObject(vEntry)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoEntry Set pvComObject Of hoEntry To vEntry End Get ComFileName Of hoEntry To sTemp1 Get ComEntryType Of hoEntry To iTemp1 Showln sTemp1 " entryType = " iTemp1 Send Destroy of hoEntry Move (i + 1) To i Loop Showln "----" // After writing the .zip, the entry types change to 0. // Entry type 0 indicates that it's a "mapped entry", which is an entry in an existing (and currently open) .zip file. // hamlet.xml entryType = 0 // hello.pdf entryType = 0 // ... // ... // helloWorld.txt entryType = 0 // ---------------------------------------------------------------------------- // If desired, we could continue adding additional entries of any kind (files or data) to the currently open .zip archive... Get ComAppendString Of hoZip "helloWorld2.txt" "Hello World 2" To vETemp If (IsComObject(vETemp)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoETemp Set pvComObject Of hoETemp To vETemp End Send Destroy of hoETemp // Write the .zip, including the new entries.. Get ComWriteZip Of hoZip To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoZip To sTemp1 Showln sTemp1 Procedure_Return End // Finally, let's look again at the entries in the .zip Get ComNumEntries Of hoZip To iCount Move 0 To i While (i < iCount) Get ComGetEntryByIndex Of hoZip i To vEntry If (IsComObject(vEntry)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoEntry Set pvComObject Of hoEntry To vEntry End Get ComFileName Of hoEntry To sTemp1 Get ComEntryType Of hoEntry To iTemp1 Showln sTemp1 " entryType = " iTemp1 Send Destroy of hoEntry Move (i + 1) To i Loop Showln "----" // hamlet.xml entryType = 0 // hello.pdf entryType = 0 // ... // ... // helloWorld.txt entryType = 0 // helloWorld2.txt entryType = 0 Send ComCloseZip To hoZip Showln "Success" End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.