Tcl
Tcl
Remove an Entry from an Existing ZIP Using DeleteEntry
See more Zip Examples
This example demonstrates how to use the DeleteEntry method
to remove a file from an existing ZIP archive.
The example:
- Creates a ZIP archive containing three text files
- Opens the ZIP archive for modification
- Finds and deletes one entry
- Writes the modified ZIP archive to a new filename
Suppose the original ZIP archive contains:
a.txt
b.txt
c.txt
After deleting b.txt, the modified ZIP archive contains:
a.txt
c.txt
The entry is removed only from the in-memory ZIP object until a
Write* method is called.
Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
set success 0
# ------------------------------------------------------------
# First create a ZIP archive containing three text files.
set zip [new_CkZip]
set success [CkZip_NewZip $zip "original.zip"]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip]
delete_CkZip $zip
exit
}
set charset "utf-8"
set success [CkZip_AddString $zip "a.txt" "Contents of file A" $charset]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip]
delete_CkZip $zip
exit
}
set success [CkZip_AddString $zip "b.txt" "Contents of file B" $charset]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip]
delete_CkZip $zip
exit
}
set success [CkZip_AddString $zip "c.txt" "Contents of file C" $charset]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip]
delete_CkZip $zip
exit
}
# Write the ZIP archive to disk.
#
# The ZIP now contains:
#
# a.txt
# b.txt
# c.txt
#
set success [CkZip_WriteZipAndClose $zip]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip]
delete_CkZip $zip
exit
}
# ------------------------------------------------------------
# Open the existing ZIP archive for modification.
set zip2 [new_CkZip]
set success [CkZip_OpenZip $zip2 "original.zip"]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip2]
delete_CkZip $zip
delete_CkZip $zip2
exit
}
# Find the entry named "b.txt".
set entry [new_CkZipEntry]
set success [CkZip_EntryOf $zip2 "b.txt" $entry]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip2]
delete_CkZip $zip
delete_CkZip $zip2
delete_CkZipEntry $entry
exit
}
# Remove the entry from the in-memory ZIP object.
#
# At this point, the original ZIP file on disk is unchanged.
# The deletion takes effect only after WriteZip or
# WriteZipAndClose is called.
set success [CkZip_DeleteEntry $zip2 $entry]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip2]
delete_CkZip $zip
delete_CkZip $zip2
delete_CkZipEntry $entry
exit
}
# Write the modified ZIP archive to a new file.
CkZip_put_FileName $zip2 "modified.zip"
set success [CkZip_WriteZipAndClose $zip2]
if {$success == 0} then {
puts [CkZip_lastErrorText $zip2]
delete_CkZip $zip
delete_CkZip $zip2
delete_CkZipEntry $entry
exit
}
# The modified ZIP now contains:
#
# a.txt
# c.txt
#
puts "ZIP archive updated successfully."
delete_CkZip $zip
delete_CkZip $zip2
delete_CkZipEntry $entry