-
zip(),zipr(),zip_append(),zipr_append(),zip_process(), and
unzip()/unzip_process()now support password-protected archives
using WinZIP AES-256, and other encryption schemes (#38). -
zip_list()now reports anencryptioncolumn indicating the encryption
scheme used for each entry (#38). -
unzip()is now vectorized. If all arguments apart fromzipfile,
exdirandpasswordare the default, then it unprocesses all files
concurrently, using a thread pool. The size of the thread pool can be
set with thezip_threadsoption or theZIP_THREADSenvironment
variable (#147). -
zip_list()andunzip()now work directly onhttp://andhttps://
URLs. They use HTTP range requests to download only the central directory
and the requested entries, so listing or extracting a few files from a
large remote archive does not downloads the whole file. If the server
does not support range requests, they fall back to downloading the entire
archive (with a warning). This requires the curl package (#39). -
zip_list()andunzip()now report the Unix permission bits stored in an
archive on Windows as well. Previously they always reported700/600on
Windows, regardless of the permissions recorded in the ZIP file. -
zip_list()andunzip()now reporttype == "directory"for directory
entries whose Unix mode bits lackS_IFDIRbut that are marked as
directories by a trailing slash or the DOS directory attribute (e.g.
archives created byzip()itself). Previously these were reported as
"file". -
zip()andunzip()now show a progress bar when theclipackage is
installed. Forzip(), progress is byte-level, so large single files are
tracked smoothly. Forunzip(), progress advances once per extracted
entry. Progress bars are (for now) opt-in via theZIP_PROGRESS=true
environment variable or thezip.progressoption (#48). -
unzip()now returns a data frame (invisibly) with one row per extracted
entry, containing the same columns aszip_list()(filename,
compressed_size,uncompressed_size,timestamp,permissions,
crc32,offset,type) plus apathcolumn with the absolute path
to each extracted file on disk (#35). -
zip_list()andunzip()now have anencodingargument for ZIP files
with non-UTF-8, non-CP437 filenames (e.g. CP932/Shift-JIS on Japanese
Windows). Whenencodingis set, filenames without the UTF-8 flag are
decoded from the specified code page instead of CP437 (#101). -
zip_append()andzipr_append()now replace existing entries when
appending a file whose archive path already exists in the zip file,
instead of creating duplicate entries (#111). -
unzip()andzip_list()now correctly handle ZIP files with
non-UTF-8 filenames (e.g. filenames encoded in IBM CP437, as created
by many Windows tools). The filenames are converted to UTF-8 using the
CP437 character map when the UTF-8 flag is not set in the ZIP entry
(#103). -
New
keysargument tozip(),zipr(),zip_append(), and
zipr_append(). It allows specifying custom paths for entries inside
the archive, independently of their paths on disk (#50). -
unzip_process()now probes falls back to using an R subprocess when
the bundledcmdunzipexecutable cannot be started (#135). -
Updated embedded miniz to version 3.1.1 (#122).