Sample code for 30+ languages & platforms
Lua

Controlling paths within a Zip

See more Zip Examples

How to control the paths stored within a .zip.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local zip = chilkat.Zip.new()

-- This is the directory structure on the local filesystem
-- from which we'll create .zip archives:
-- The root directory is /temp/filesToZip
--
-- We have these files:
-- /temp/filesToZip/faxCover.doc
-- /temp/filesToZip/exe/Setup.exe
-- /temp/filesToZip/images/cheese.jpg
-- /temp/filesToZip/images/dude.gif
-- /temp/filesToZip/images/img3.gif
-- /temp/filesToZip/images/img4.gif
-- /temp/filesToZip/images/img5.gif
-- /temp/filesToZip/images/scream.jpg
-- /temp/filesToZip/images/imageInfo/scream.xml
-- /temp/filesToZip/images/imageInfo/cheese.xml
-- /temp/filesToZip/text/html/bonaireFishing.html
-- /temp/filesToZip/text/html/upload.html
-- /temp/filesToZip/text/txt/hello.txt
-- /temp/filesToZip/text/txt/HelloWorld123.txt
-- /temp/filesToZip/text/xml/hamlet.xml
-- /temp/filesToZip/text/xml/pigs.xml

-- There are three properties to help control the paths stored
-- within a .zip:
-- AppendFromDir
-- PathPrefix
-- DiscardPaths
--

-- First we'll demonstrate AppendFromDir
-- When a directory tree is appended via AppendFiles or
-- AppendFilesEx, the AppendFromDir sets the base of the
-- directory tree appended (if the file pattern contains a
-- relative path, or no path at all).

-- Clear the zip object.
zip:new_zip("test1.zip")

local recurse = true

zip.append_from_dir = "/temp/filesToZip"
local success = zip:append_files("*.xml", recurse)

-- The zip will contain:
-- images/imageInfo/scream.xml
-- images/imageInfo/cheese.xml
-- text/xml/hamlet.xml
-- text/xml/pigs.xml

success = zip:write_zip_and_close()
if not success then
    print(zip.last_error_text)
    return
end

-- Clear the zip object.
success = zip:new_zip("test2.zip")

zip.append_from_dir = "/temp/filesToZip/images"
success = zip:append_files("*.xml", recurse)
zip.append_from_dir = "/temp/filesToZip/text"
success = zip:append_files("*.xml", recurse)

-- The zip will contain:
-- imageInfo/scream.xml
-- imageInfo/cheese.xml
-- xml/hamlet.xml
-- xml/pigs.xml

success = zip:write_zip_and_close()
if not success then
    print(zip.last_error_text)
    return
end

-- The PathPrefix property adds an arbitrary path prefix to each
-- file in the .zip.
-- For example:

-- Clear the zip object.
success = zip:new_zip("test3.zip")

zip.path_prefix = "chilkat/"

zip.append_from_dir = "/temp/filesToZip/images"
success = zip:append_files("*.xml", recurse)
zip.append_from_dir = "/temp/filesToZip/text"
success = zip:append_files("*.xml", recurse)

-- The zip will contain:
-- chilkat/imageInfo/scream.xml
-- chilkat/imageInfo/cheese.xml
-- chilkat/xml/hamlet.xml
-- chilkat/xml/pigs.xml

success = zip:write_zip_and_close()
if not success then
    print(zip.last_error_text)
    return
end

-- The DiscardPaths property removes the path from each file
-- in the zip:
-- For example:

-- Clear the zip object.
success = zip:new_zip("test4.zip")

zip.path_prefix = ""
zip.discard_paths = true

zip.append_from_dir = "/temp/filesToZip/"
success = zip:append_files("*", recurse)

-- The zip will contain:
-- faxCover.doc
-- Setup.exe
-- cheese.jpg
-- dude.gif
-- img3.gif
-- img4.gif
-- img5.gif
-- scream.jpg
-- scream.xml
-- cheese.xml
-- bonaireFishing.html
-- upload.html
-- hello.txt
-- HelloWorld123.txt
-- hamlet.xml
-- pigs.xml

success = zip:write_zip_and_close()
if not success then
    print(zip.last_error_text)
    return
end

-- You can combine PathPrefix with DiscardPaths:

-- Clear the zip object.
success = zip:new_zip("test5.zip")

zip.path_prefix = "chilkat/"
zip.discard_paths = true

zip.append_from_dir = "/temp/filesToZip/"
success = zip:append_files("*", recurse)

-- The zip will contain:
-- chilkat/faxCover.doc
-- chilkat/Setup.exe
-- chilkat/cheese.jpg
-- chilkat/dude.gif
-- chilkat/img3.gif
-- chilkat/img4.gif
-- chilkat/img5.gif
-- chilkat/scream.jpg
-- chilkat/scream.xml
-- chilkat/cheese.xml
-- chilkat/bonaireFishing.html
-- chilkat/upload.html
-- chilkat/hello.txt
-- chilkat/HelloWorld123.txt
-- chilkat/hamlet.xml
-- chilkat/pigs.xml

success = zip:write_zip_and_close()
if not success then
    print(zip.last_error_text)
    return
end

-- One last example -- combine DiscardPaths with PathPrefix
-- with multiple calls to AppendFiles:

-- Clear the zip object.
success = zip:new_zip("test6.zip")

zip.discard_paths = true
zip.append_from_dir = "/temp/filesToZip/"

-- Get all .gif files:
zip.path_prefix = "gif/"
success = zip:append_files("*.gif", recurse)

-- Get all .jpg files:
zip.path_prefix = "jpg/"
success = zip:append_files("*.jpg", recurse)

-- Get all .xml files:
zip.path_prefix = "xml/"
success = zip:append_files("*.xml", recurse)

-- The zip will contain:
-- jpg/cheese.jpg
-- gif/dude.gif
-- gif/img3.gif
-- gif/img4.gif
-- gif/img5.gif
-- jpg/scream.jpg
-- xml/scream.xml
-- xml/cheese.xml
-- xml/hamlet.xml
-- xml/pigs.xml

success = zip:write_zip_and_close()
if not success then
    print(zip.last_error_text)
    return
end