![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java JavaScript Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Chilkat Zip API ConceptsSee more Zip Examples This example demonstrates several core concepts of the The example shows how to:
The example also demonstrates the meaning of the different
This example is especially useful for understanding that methods such as Note: This example requires Chilkat v11.0.0 or greater.
load ./chilkat.dll set success 0 set zip [new_CkZip] # ------------------------------------------------------------ # This example demonstrates some of the fundamental concepts # of the Chilkat Zip class. # # We will: # # 1) Create a new ZIP object # 2) Add a filesystem file using AddFile # 3) Add an in-memory text entry using AddString # 4) Examine the ZIP entries before writing the ZIP # 5) Write the ZIP archive # 6) Examine how the entry types change after writing # # The final ZIP archive will contain: # # helloWorld.txt # HelloWorld2.txt # # ------------------------------------------------------------ # Initialize the Zip object. # # NewZip resets the Zip object to a new and empty state. # It does NOT immediately create the .zip file. # # The filename passed to NewZip becomes the default filename # used later when WriteZip or WriteZipAndClose is called. set success [CkZip_NewZip $zip "test.zip"] if {$success == 0} then { puts [CkZip_lastErrorText $zip] delete_CkZip $zip exit } puts "ZIP filename = [CkZip_fileName $zip]" puts # ------------------------------------------------------------ # Add a file from the local filesystem. # # AddFile does NOT immediately read or compress the file. # Instead, it adds a reference to the filesystem file. # # The actual file data will be read later when WriteZip # or WriteZipAndClose is called. # # Note: # On Windows, forward slashes are equivalent to backslashes. set saveExtraPath 0 set success [CkZip_AddFile $zip "/temp/abc123/HelloWorld123.txt" $saveExtraPath] if {$success == 0} then { puts [CkZip_lastErrorText $zip] delete_CkZip $zip exit } # The ZIP object now contains one entry that references # the local filesystem file: # # /temp/abc123/HelloWorld123.txt # # ------------------------------------------------------------ # Change the filename that will be stored in the ZIP archive. # # The source filesystem file remains: # # /temp/abc123/HelloWorld123.txt # # But the ZIP entry will be written as: # # helloWorld.txt # set entry [new_CkZipEntry] CkZip_EntryAt $zip 0 $entry CkZipEntry_put_FileName $entry "helloWorld.txt" # ------------------------------------------------------------ # Add another ZIP entry directly from in-memory text data. # # This entry does not reference a filesystem file. # The text data already exists in memory. set success [CkZip_AddString $zip "HelloWorld2.txt" "hello world!" "utf-8"] if {$success == 0} then { puts [CkZip_lastErrorText $zip] delete_CkZip $zip delete_CkZipEntry $entry exit } # ------------------------------------------------------------ # Examine the ZIP entries before writing the ZIP archive. # # ZIP entries can have different entry types: # # 0 -- Mapped Entry # An entry already existing in an open ZIP archive. # # 1 -- File Entry # A reference to a filesystem file that has not yet # been read or compressed. # # 2 -- Data Entry # An in-memory entry containing text or binary data. # # 3 -- Null Entry # An entry that no longer exists. # # 4 -- New Directory Entry # A directory entry added by AddEmpty. # # At this point: # # helloWorld.txt => type 1 # HelloWorld2.txt => type 2 # puts "Entries BEFORE writing the ZIP:" puts set n [CkZip_get_NumEntries $zip] for {set i 0} {$i <= [expr $n - 1]} {incr i} { CkZip_EntryAt $zip $i $entry puts " [CkZipEntry_fileName $entry], type=[CkZipEntry_get_EntryType $entry]" } puts # ------------------------------------------------------------ # Write the ZIP archive. # # During this call: # # * Filesystem file references are read # * Data is compressed as needed # * The .zip file is created and written # set success [CkZip_WriteZip $zip] if {$success == 0} then { puts [CkZip_lastErrorText $zip] delete_CkZip $zip delete_CkZipEntry $entry exit } # ------------------------------------------------------------ # Examine the ZIP entries again AFTER writing. # # Because we called WriteZip (instead of WriteZipAndClose), # the ZIP archive remains open. # # The entries are automatically converted to # "mapped entries" (type 0), meaning they now point to # entries within the currently open ZIP archive. # # At this point: # # helloWorld.txt => type 0 # HelloWorld2.txt => type 0 # puts "Entries AFTER writing the ZIP:" puts set n [CkZip_get_NumEntries $zip] for {set i 0} {$i <= [expr $n - 1]} {incr i} { CkZip_EntryAt $zip $i $entry puts " [CkZipEntry_fileName $entry], type=[CkZipEntry_get_EntryType $entry]" } puts # ------------------------------------------------------------ # Close the ZIP archive and clear the Zip object. CkZip_CloseZip $zip puts "Done." delete_CkZip $zip delete_CkZipEntry $entry |
||||
© 2000-2026 Chilkat Software, Inc. All Rights Reserved.