Archived History of Changes in the ZipArchive Library
Applies To:
All
Newest History
To see the newest history of changes, please visit
History of Changes in the ZipArchive Library4.6.9 (2022-12-15)
Changes
4.6.8 (2022-06-01)
New Features
-
Added
CZipFileHeader::GetFileTitle
,
CZipFileHeader::GetFileExtension
(thanks to Andrew Truckle)
-
Added
lpszFileInZip
parameter to the
CMultiActionsInfo::MultiActionsNext
method (thanks to Andrew Truckle)
- Added support and project files for Visual Studio 2022. They are now default project files for the ZipArchive Library.
Changes
-
The Zlib library updated to version 1.2.12; see
the Zlib library change log
for more information.
-
The bzlib library updated to version 1.0.8; see
the bzlib library change log
for more information.
- Stopped support of Visual Studio versions older than 2017 as that became too troublesome to maintain on modern OSes with little benefit at the same time.
Bugs Fixed
4.6.7 (2019-04-17)
New Features
- Added support and project files for Visual Studio 2019. They are now default project files for the ZipArchive Library.
- Supporting reading of non-Zip64 archives with more than 65535 entries in the archive (thanks to Jeffrey Beckwith).
Bugs Fixed
- Various code issue fixes reported by Visual Studio Static Code Analysis "Microsoft Native Recommended Rules" (thanks to Andrew for reporting it)
4.6.6 (2018-07-19)
New Features
Changes
Bugs Fixed
4.6.5 (2017-11-25)
New Features
- Added support and project files for Visual Studio 2017. They are now default project files for the ZipArchive Library.
Changes
- Eliminated Visual Studio Code Analysis warnings (thanks to Andrew for reporting it).
4.6.4 (2017-01-23)
New Features
- Added x64 configurations to Visual Studio projects starting from Visual Studio 2005 projects up for ZipArchive and from Visual Studio 2010 for sample applications (thanks to Niels Dekker and Christoph Thien).
Changes
Bugs Fixed
- Corrected compilation under MFC x64 (thanks to all that reported it).
4.6.3 (2017-01-05)
New Features
Changes
-
Replaced the call to
GetTempFileName
with
_mktemp_s
for more security (thanks to Joel Iwashige for the suggestion).
-
Replaced
UINT
with
size_t
in
CZipMemFile
for full 64-bit support (thanks to Axel Lehnert for poining this out).
-
The Zlib library updated to version 1.2.10; see
the Zlib library change log
for more information.
4.6.2 (2015-09-12)
New Features
- Added project files for Visual Studio 2015. These are now default project files for the ZipArchive Library.
Changes
-
Under Windows the
ZipPlatform::GetFileTimes
method can now read file times when there are no permissions for listing files, but there are permissions for reading a file (thanks to Alexander).
Bugs Fixed
- In certain archives directories were not properly detected under Linux/macOS version.
- A workaround for invalid archives not adhering to Zip64 specifications.
-
Options dialog was not working in ZipArc when
_ZIP_BZIP2
was not defined.
-
Under Windows the
ZipPlatform::GetFileTimes
method was not retrieving the Last Access Time (it was retrieving Last Write Time instead).
- Fixed creation of the local header when Zip64 extensions are used to adhere to the specifications.
- Added a workaround during archive creation for a Windows Compressed Folders problem that cannot read the Zip64 information under certain circumstances (thanks to Alexander for reporting this).
- Avoided creation empty folders during extraction under certain situations (thanks to Alexander).
- Some code cleanup.
4.6.1 (2014-07-26)
New Features
- Added project files for Visual Studio 2013. These are now default project files for the ZipArchive Library.
Bugs Fixed
- Better detection of folders in some invalid archives.
-
Fixed performance problems related to
CZipString
processing (thanks to Alfred Poon for the fix).
- Fixed an issue when sorting of headers with invalid offsets could result in memory access violation (thanks to Alfred Poon for the fix).
4.6.0 (2013-12-15)
New Features
- Added wide char support to Linux/macOS version (normalization is currently not supported).
-
Added
CZipStorage::GetSplitVolumeName
.
- Added -tv switch to zippie.
- Added better errors reporting while testing in zippie.
Changes
Bugs Fixed
- Fixed the problem when canceling AddNewFiles compression with a callback resulted in handles not released (thanks to Sarfaraz for reporting it).
- Eliminated runtime check fail with zlib library under Visual Studio (it was harmless, but the warning was nevertheless issued).
4.5.0 (2013-02-25)
New Features
Changes
Bugs Fixed
- Fixed "Smaller Type Check" error under Visual Studio (thanks to Nigel Delaforce).
- Fixed compilation errors under XCode 4.4.
- Fixed compilation errors under gcc 4.7.
- Fixed -af zippie switch (thanks to Ciro Ettorre).
4.1.2 (2012-03-03)
Changes
- Zlib library updated to 1.2.6
Bugs Fixed
- An archive was corrupted if replacing a file in the archive with a file that is locked by another process.
- Fixed the situation where removing all files in an archive with self-extract stub resulted in overwriting the stub.
- Recovery from extracting a split archive with missing parts was not possible without a callback.
- Zippie extraction problems with split archives.
4.1.1 (2011-06-27)
New Features
Changes
-
CZipString
in the STL version no longer derives from
std::basic_string<TCHAR>
, but uses the STL string as a variable. This is changed because of Visual Studio 2010 having problems with linking it (thanks to Christian Khoukaz for providing the fix).
Bugs Fixed
-
Fixed a crash caused by lack of initialization when using Recycle Bin (
ZipPlatform::dfmRecycleBin
) for files removal.
- Fixed a crash when reading extra fields from certain corrupted archives.
- Setting a file modification time after file extraction under Windows could fail when it was locked by a file system notification hook (thanks to Dengg Helmut).
-
When
CZipArchive
is throwing an exception related to an external file (when e.g. adding a non-existing file), it includes now this external file path information in the exception instead of the zip archive path information (thanks to Miroslav Bonchev).
- Fixed trial versions.
4.1.0 (2010-10-31)
New Features
- Added project files for Visual Studio 2010. These are now default project files for the ZipArchive Library.
-
Added the possibility to controls overwriting of files during extraction in the
CZipArchive::ExtractFile(ZIP_INDEX_TYPE, LPCTSTR)
method.
-
Added
CZipAbstractFile::HasFilePath()
method to allow properly using custom file implementations that have no physical paths. That includes using abstract files with the
CZipArchive::OpenFrom()
method.
-
Added the
CZipArchive::GetLastIndexAdded()
method.
-
Very long paths support under Windows is now automatic. There is no need to prefix paths with
\\?\
when extracting.
Changes
- Zlib library updated to 1.2.5
- bzip2 library updated to 1.0.6
- Leading path separators are removed from filenames stored in archives.
- When a trailing path separator is added to a file name, this file will be added as a folder.
- File names with trailing path separators in archive and with size 0 are always treated as folders.
-
Removed the
CZipArchive::SetExhaustiveRead
method. Use the
CZipArchive::SetSpecialFlags()
method instead.
-
Removed the
CZipArchive::GetExhaustiveRead
method. Use the
CZipArchive::GetSpecialFlags()
method instead.
-
The
CZipMemFile
class derives now from
CFile
in MFC compilation (but not under Visual Studio 6.0 with
_ZIP_FILE_IMPLEMENTATION
set to
ZIP_ZFI_WIN
).
Bugs Fixed
- Fixed attributes conversion from NTFS system to others.
- When a hidden file was compressed under Windows it received no read permissions when extracted under Un*x systems. Now it has read permissions for the user.
-
When using
CZipArchive::umExtra
unicode characters were not correctly preserved under some conditions.
- When renaming a file or a directory, problems could occur when FindFast was enabled.
- Fixed a problem when removing files in large archives using Visual Studio 6.0 (thanks to Alexandr Novy).
- Fixed a problem with AES encryption under x64.
- Fixed an issue when extracting archives having Zip64 EoCD locator written when not needed.
- Fixed path separators conversion when using Unicode extra headers (thanks to Miroslav Bonchev for reporting it).
-
Fixed an issue when
CZipArchive::GetFromArchive()
method copied a CRC encrypted file without the data descriptor.
4.0.1 (2009-04-24)
Changes
-
Allowed using precompiled headers by correcting the
stdafx.h
inclusion order.
- Projects for Visual Studio 2010/2008/2005/2003 use now a precompiled header.
Bugs Fixed
- Fixed problem with decompressing spanned archives (thanks to Miroslav Bonchev for reporting it).
-
CZipFile::Seek()
in the STL version didn't seek on files larger than 2GB when Zip64 was disabled.
-
Opening an archive that was not a split archive, was throwing exception when closing an archive even if the
iAfterException
parameter was set to
CZipArchive::afAfterException
(thanks to Dragan Milic for reporting it).
- Opening a binary split archive could throw an exception sometimes (thanks to Dragan Milic for the fix).
- Extracting a binary split archive could throw exception with some archives (thanks to Dragan Milic for reporting it).
- Fixed run-time check failure under Visual Studio (a cast to a smaller data type has caused a loss of data) - thanks to James Grocholl for the fix.
- Fixed custom Unicode compilation issues in the Open Source version (thanks to Ralph Valeriote for reporting it).
4.0.0 (2009-03-24)
New Features
Changes
- The library uses now Visual Studio 2008 project files by default. Project files for other compilers are available and maintained.
-
The following compiler macros were renamed:
-
ZIP_ARCHIVE_STL
renamed to
_ZIP_IMPL_STL
.
-
ZIP_ARCHIVE_MFC
renamed to
_ZIP_IMPL_MFC
.
-
ZIP_ARCHIVE_WIN
renamed to
_ZIP_SYSTEM_WIN
.
-
ZIP_ARCHIVE_LNX
renamed to
_ZIP_SYSTEM_LINUX
.
-
_ZIP64
renamed to
_ZIP_ZIP64
.
-
_BZIP2
renamed to
_ZIP_BZIP2
.
-
ZIP_ARCHIVE_USE_LOCKING
renamed to
_ZIP_USE_LOCKING
.
-
ZIP_ARCHIVE_BZIP2_INTERNAL
renamed to
_ZIP_BZIP2_INTERNAL
.
-
Changed opening modes for the
CZipArchive::Open(LPCTSTR)
method. The
ZIP_AUTODETECT_VOLUME_SIZE
compiler macro was removed, because it was no longer necessary.
-
Allowed direct modifications of
CZipFileHeader
instead of calling methods of the
CZipArchive
class.
-
The
CZipCompressor::methodStore
flag allowed in the
CZipArchive::SetCompressionMethod()
method.
-
CZipArchive::GetSegmMode()
removed. Use appropriate methods of the
CZipStorage
class (accessible through the
CZipArchive::GetStorage()
method).
-
Changed endianess detection.
ZIP_ARCHIVE_LITTLE_ENDIAN
was removed. Define
_ZIP_BIG_ENDIAN
to compile for big endinan. See
Compilation of the ZipArchive Library and Integration with Applications
for more information.
-
CZipArchive::Close()
returns the name of the last volume in the archive. It is useful when handling split archives (to open a split archive, it is required to open the last volume).
-
The following methods and fields were renamed:
-
Exception
CZipException::fileError
is now thrown when attributes could not be read from a file (in various places).
-
CZipArchive::PredictMaximumFileSizeInArchive()
uses now
CZipFileHeader::m_uComprSize
instead of
CZipFileHeader::m_uLocalComprSize
.
-
ZipCompatibility::zcNtfs
value changed to
11
to be consistent with other software (thanks to Ken Daraseng for reporting it).
-
CZipFile::OpenModes
made compatible with
CFile
modes.
-
CZipFileHeader::m_uVersionMadeBy
contains now only a "made by " version without the compatibility information.
-
When using
CZipArchive::SetGlobalComment()
, a file inside of archive cannot be opened for compression or extraction.
-
To use custom Unicode support in the ZipArchive Library, you need to define now
_ZIP_UNICODE_CUSTOM
(see
Unicode Support: Using Non-English Characters in Filenames, Comments and Passwords
for more information).
-
When using custom Unicode,
CZipStringStoreSettings::m_uCommentCodePage
is only used to set a file comment page, not global comment code page. Use the
CZipArchive::SetGlobalComment()
method instead.
- During modifications, the ZipArchive Library now checks, if the archive can be modified.
-
The
CZipActionCallback::cbModify
does not provide an archive name in the
CZipActionCallback::Init()
method, because multiple files can be renamed now at once.
- Removed support for MSDN integration in Visual Studio 6.0.
- Bzip2 library updated to 1.0.5 version.
3.2.0 (2007-12-15)
New Features
-
Seeking possibility in the compressed deflate stream. This allows to start data decompression not necessarily from the beginning of a compressed file (see
Creating Seekable Compressed Data
for more information). This feature is available in the Full Version only.
-
CZipArchive::SeekInFile()
method added.
-
CZipArchive::ExtractFile()
methods have an additional parameter used during seek operations.
-
Callbacks possible while using split archives allowing to extract segmented archives with non-standard volume naming scheme. This functionality also allows to create segmented archives with custom volume naming scheme (thanks to Dmitry for suggestion). See
Segmented Archives: Splitting and Spanning
for more information.
-
The
CZipArchive::SetSegmCallback()
method has an additional parameter that allows setting callbacks separately for spanned and split archives. It is set by default to set the callback for spanned archives, so that it doesn't break the existing applications.
-
Workaround to use Zip64 in Visual Studio 6.0 MFC. It uses STL implementation of
CZipFile
in MFC compilation (thanks to Igor Green for suggestion and reporting some other issues).
-
Possibility to adjust individual compressors options.
See
CZipArchive::SetCompressionOptions()
and
Compressing Data
for more information.
-
CZipPathComponent::Combine()
added.
-
CZipMemFile::ReInit()
added.
Changes
-
Some terminology regarding segmented archives was changed, to keep the consistency with the functionality (partly due to introduction of callbacks for split archives). This includes the following changes:
-
It is no longer needed to adjust the returned attributes value from the following methods under Linux (by shifting right by 16 bits):
Also, the shifting operation is not needed when using the
CZipFileHeader::SetSystemAttr()
method.
-
ZIP_EXTRA_ZARCH
renamed to
ZIP_EXTRA_ZARCH_NAME
.
-
The general buffer, the size of which is controlled by the second argument of the
CZipArchive::SetAdvanced()
method, is no longer used for compression and decompression processing. The size of the buffer that is used in these operations can be controlled by setting the
CZipCompressor::COptions::m_iBufferSize
option. See
Compressing Data
for more information about setting options.
-
In the Windows/non-Unicode version, the ZipArchive Library called the
CharToOemBuffA
and
OemToCharBuffA
functions. These functions are considered unsafe and banned by Microsoft (thanks to Noyer Gilles for pointing this out) and were replaced by sequences of calls to the
WideCharToMultiByte
and
MultiByteToWideChar
functions. However, it takes now four calls to perform the conversion instead of just one. If you prefer the old behavior, you can comment out the
ZIP_USES_SAFE_WINDOWS_API
definition in the
ZipPlatform_win.cpp
file and the former functions will be used for conversion.
-
ZipPlatform::SingleToWide()
renamed to
ZipPlatform::MultiByteToWide()
.
-
ZipPlatform::WideToSingle()
renamed to
ZipPlatform::WideToMultiByte()
.
-
CZipPathComponent::GetFullPath()
adds
.\
before the filename, if the path and drive are empty.
- Removed support for project files for old Borland compilers. Compilation compatibility is preserved against C++Builder.
Bugs Fixed
- Fixed Bzip2 compression problem (thanks to Neville Franks for reporting it).
- Large files without compression were not stored correctly inside an archive.
-
Possible memory leak eliminated in
CZipFileHeader::operator=()
.
- Fixes for proper compilation with Qt to avoid multiple symbols defined (thanks to Magne Sjaastad).
-
When an exception was thrown while opening
CZipFile
in the STL version, the
CZipException::m_szFileName
was not initialized with the filename (thanks to Alberto Pierotti).
- Compilation problems under Cygwin (thanks to Mark Space for reporting it).
-
The
bRewind
parameter in the
CZipArchive::ExtractFile(ZIP_INDEX_TYPE, CZipAbstractFile&)
method was not working (thanks to Andrew for reporting it).
-
Fixed a mutex copying problem when using the
CZipArchive
object in multiple threads.
- Fixed problems with compilation of the library under C++ Builder (thanks to Bobyin for reporting it).
3.1.1 (2007-09-01)
Changes
Bugs Fixed
-
Memory leaks in Zlib library when aborting creation of spanned archives by returning
false
from a callback method (thanks to Michael Oerder for reporting it).
-
Incorrect values might have been returned by the
CZipStorage::VolumeLeft()
method.
- An assertion warning when aborting creation of spanned archives in STL version.
3.1.0 (2007-08-10)
New Features
-
Bip2 compression algorithm support (see
Compressing Data
for more information). Sample applications update to support this functionality.
-
Possibility to encrypt existing files in an archive (thanks to David Goldman for the suggestion). See
Encryption Methods: How to Best Protect Your Data
for more information).
-
Possibility to share the central directory between multiple archives when extracting in multiple threads (see
Extracting Data and Testing Archives
for more information).
-
CZipArchive::GetFromArchive()
methods are now sensitive to encryptions settings. This way files can be encrypted while getting them from another archive (see
Compressing Data
for more information).
-
Support for creation of self-extracting archives in the compatible way with popular archivers, such as WinZip and WinRar (see
Self-Extracting Archives
for more information).
-
Possibility to convert an existing archive into a self-extracting archive in the compatible way with popular archivers (see
Self-Extracting Archives
for more information).
-
Possibility to append an archive to an existing data when creating an archive in memory. Specify the
CZipArchive::zipCreateAppend
mode when opening an archive in memory.
-
The
CZipArchive::SetExhaustiveRead()
method added. It helps when the number of files is incorrectly written in an archive by external software (thanks to Dragan Milic for reporting it).
-
Possibility to use AES encryption in multiple threads (see
Encryption Methods: How to Best Protect Your Data
for more information).
-
Possibility to change the modification time of existing files inside an archive in a consistent way (see
Modification of Archives: Replacing, Renaming, Deleting and Changing Data
for more information).
Changes
Bugs Fixed
- Problems when opening large files under macOS (thanks to Dragan Milic for help).
- Some further problems when the original Zlib library was linked with the program that used the ZipArchive Library.
- Compilation problems under Windows NT when using AES encryption (thanks to Heiko Eckendorf).
- Problems with CZipString in STL version under some MinGW installations (thanks to Laurent Ribon for the fix).
3.0.2 (2007-05-14)
New Features
Changes
-
CZipActionCallback::m_iStep
removed. Use
CZipActionCallback::GetStepSize()
functionality for more flexible callback call frequency adjustment.
- The ZipArchive Library now uses the version AE-1 of the WinZip AES encryption instead of AE-2. It is consistent with the behavior of WinZip 11.0 which uses the AE-1 format back again in most cases for an extra integrity check. AE-2 format is used only for files which size is less than 20 bytes to avoid discovery of their contents using CRC value.
- Data descriptor is not used in WinZip AES encryption in non-segmented archives - it was not necessary and could cause problems when extracting with older versions of WinZip.
-
String store settings are not reset now when opening an archive (see
Unicode Support: Using Non-English Characters in Filenames, Comments and Passwords
). This allows setting custom code pages and thus proper decoding of filenames and comments in archives that use non-standard code pages and don't use the ZipArchive Library extra fields for code pages.
-
The ZipArchive now checks, if the deflate compression stream ends properly (the Zlib library returns
Z_STREAM_END
from
inflate()
when there is no more bytes to decompress). The ZipArchive Library throws an exception with the
CZipException::badZipFile
code, if the compression stream is incorrect. This is an extra security check against malformed data.
-
Find Fast sorting speeded up (thanks to Muayyad for reporting it). For more
information about Find Fast, see
Searching in Archive
.
-
The Zlib library compression level constants replaced by the
CZipCompressor::CompressionLevel
values. The replaced constants are:
Z_DEFAULT_COMPRESSION
,
Z_NO_COMPRESSION
,
Z_BEST_SPEED
,
Z_BEST_COMPRESSION
.
-
The
CZipArchive::checkDataDescriptor
check is now not performed by default. This is consistent with the behavior of popular archivers.
-
CZipArchive::CallbackType
enumeration values moved to
CZipActionCallback::CallbackType
.
-
CZipActionCallback::m_uTotalSoFar
renamed to
CZipActionCallback::m_uProcessed
-
CZipActionCallback::m_uTotalToDo
renamed to
CZipActionCallback::m_uTotalToProcess
-
CZipActionCallback::LeftToDo()
renamed to
CZipActionCallback::LeftToProcess()
-
Methods that remove files (
CZipArchive::RemoveFile()
,
CZipArchive::RemoveFiles(CZipIndexesArray&)
and
CZipArchive::RemoveFiles(const CZipStringArray&)
) return now a
bool
value indicating the result of the operation, which is useful in situations where an exception was not thrown and yet files could not be deleted.
-
Some helper classes with common names were put under the
ZipArchiveLib
namespace to avoid possible conflicts with other software.
-
CZipFileHeader::IsDataDescr()
renamed to
CZipFileHeader::IsDataDescriptor().
-
ZipPlatform::IsDirectory()
examines attributes as they are reported by the system, not as they were stored in an archive. Under Linux it means the attributes are not shifted right by 16 before checking. The shifting is performed in
CZipFileHeader
.
Bugs Fixed
3.0.1 (2007-03-11)
New Features
Changes
Bugs Fixed
-
CZipArchive::FindFile()
behaved incorrectly under some circumstances (thanks to Magne Sjaastad for the fix).
-
CZipArchive::GetFromArchive()
methods were not working properly when the source archive was segmented.
- Default filenames were not correctly constructed when an empty filename was provided while creating a new file.
- Local Zip64 extra field was not updated when compressed size did not exceed normal zip limits. The resulting archive was generally correct, but ZipArchive reported it as bad due to additional checks (thanks to Manfrde Feege for reporting it).
- ZipArc was not correctly calculating sizes of large files due to problems in MFC.
3.0.0 (2007-02-20)
New Features
-
CZipArchive::GetFromArchive()
methods can now get data from multi-segment archives. This way you can modify existing segmented archive by repacking it using these methods (thanks to Dragan Milic for the suggestion).
- A trial version that allows testing Zip64 and AES support is available from the link at the download page.
Changes
-
ZIP_U16_U64
renamed to
ZIP_INDEX_TYPE
.
-
ZIP_U16_U32
renamed to
ZIP_PART_TYPE
.
-
ZIP_U32_U64
renamed to
ZIP_SIZE_TYPE
.
-
ZIP_32_64
renamed to
ZIP_ZLIB_TYPE
.
-
Index and volume number types (
ZIP_INDEX_TYPE
and
ZIP_PART_TYPE
) can be defined as
int
instead of
WORD
when Zip64 mode is not enabled. It is only for convenience of those, who don't use Zip64 so that they can have more flexible types in loops. You can enable this behavior by undefining
_ZIP_STRICT_U16
definition in
_features.h
file.
-
CZipException::generic
renamed to
CZipException::genericError
and
CZipException::internal
renamed to
CZipException::internalError
to allow compilation with managed C++ applications.
Bugs Fixed
- Extracting files with paths under macOS (thanks to Cory Mintz for reporting it).
-
Possible misinterpretation of
OpenFileType
enum while archive processing (thanks to Carsten Fuchs for reporting it).
- Incorrect decompression of files that contains data descriptors and have dummy deflate compressed blocks at the end of the compression stream (thanks to Michael Evangelista for reporting it).
-
CZipArray::GetUpperBound()
in STL version was returning invalid value when the size of the array was 0 due to the fact that the method returns now an unsigned value. This affected searching empty archives (thanks to Peter Kullmann for reporting it).
- Minor documentation fixes
3.0.0 beta (2006-11-27)
New Features
Changes
-
Indexes of files in an archive are unsigned, use
ZIP_FILE_INDEX_UNSPECIFIED
instead of
-1
and
ZIP_FILE_INDEX_NOT_FOUND
as a test for the return value from find methods.
- The numbers of segments in multi-segment archive are now of an unsigned type.
- The terminology for creation and extraction of multi-part archives is changed (splitting & spanning). A "pkzipSpan" archive is now called a "spanned archive" (segments of an archive are stored on removable devices). A "tdSpan" archive is now called a "split archive" (segments of an archive are stored in the same folder).
-
Minor tweaks for maintaining compatibility with PKZIP & WinZip - see
Segmented Archives: Splitting and Spanning
for more information. A split archive (formerly tdSpan) uses now a different segment's extension naming format (
z%.2u
instead of
z%.5d
) - it becomes
z%d
for segments number greater than 99.
-
CZipStorage::pkzipSpan
renamed to
CZipStorage::spannedArchive
.
-
CZipStorage::tdSpan
renamed to
CZipStorage::splitArchive
.
-
CZipStorage::suggestedTD
renamed to
CZipStorage::suggestedSplit
.
-
CZipCallback
and its subclasses use unsigned types instead of signed.
-
In the
CZipCallback::Callback()
method, the parameter
uProgress
does not provide additional information about the reason for callback - check
CZipSegmCallback::m_iCode
instead.
- The Zlib library modified slightly for the needs of the ZipArchive Library, you should use the version distributed with the ZipArchive Library instead of the standard Zlib library.
-
Makefiles for the Zlib library removed - the
Makefile
for the ZipArchive library compiles now the Zlib library as well.
-
CZipArchive::WideConversionUseAnsi()
and
CZipArchive::EnableOemConversion()
replaced by the
CZipArchive::SetStringStoreSettings()
method.
-
CZipArchive::SingleToWide()
and
CZipArchive::WideToSingle()
removed, if you need their functionality, check the methods in the
ZipCompatibility
namespace.
-
CZipArchive::GetCRCTable()
moved to the
CZipCrc32Cryptograph
class.
-
CZipArchive::GetSpanMode()
renamed to
CZipArchive::GetSegmMode()
.
-
CZipArchive::SetTreatAsSingleDisk()
removed, the detection is automatic.
-
Filenames are converted when accessed for the first time and the
CZipArchive::SetConvertAfterOpen()
was no longer needed and was removed.
-
CZipArchive::FindMatches()
it not
const
anymore (a filename update is possible during executing this method).
-
CZipArchive::SetExtraField()
removed, you can now use
CZipFileHeader::m_aLocalExtraData
and
CZipFileHeader::m_aCentralExtraData
.
-
CZipArchive::GetLocalExtraField()
removed (see
Providing Custom Data: Extra Fields
for the information about reading extra fields).
-
CZipArchive::PredictMaximumFileSizeInArchive()
uses now
CZipFileHeader::m_uLocalComprSize
instead of
CZipFileHeader::m_uUncomprSize
for calculations.
-
CZipArchive::CloseFileWithNoUpdate()
removed, call the
CZipArchive::CloseFile()
method instead and set the
bAfterException
parameter to
true
.
-
CZipArchive::GetIndexes()
adds an index to the resulting array, even if it is
ZIP_FILE_INDEX_NOT_FOUND
; this way you know which files were not found.
-
In the
CZipArchive::PredictFileNameInZip()
method, the parameter
bExactly
was removed.
-
CZipArchive::cbGetFromArchive
renamed to
CZipArchive::cbGet
.
-
CZipWordArray
renamed to
CZipIndexesArray
.
-
CZipAddNewFileInfo::m_iReplaceIndex
renamed to
CZipAddNewFileInfo::m_uReplaceIndex
and it cannot have the
-2
value anymore.
-
Encryption methods moved from the
CZipArchive
class to the
CZipCrc32Cryptograph
class.
-
The meaning for the
uProgress
parameter changed when using
CZipSegmCallback
- see
Segmented Archives: Splitting and Spanning
for more information.
-
CZipException::tooLongFileName
renamed to
CZipException::tooLongData
.
-
CZipFileHeader::SetFileName()
returns
void
instead of
bool
.
-
CZipFileHeader::GetEffComprSize()
replaced by the
CZipFileHeader::GetDataSize()
method.
-
CZipFileHeader::GetLocalSize()
made public.
-
CZipFileHeader::GetFileNameSize()
renamed to
CZipFileHeader::PredictFileNameSize()
.
-
CZipFileHeader::GetSystemAttr()
is not
const
anymore (a filename update is possible).
-
CZipFileHeader::IsDirectory()
is not
const
anymore (a filename update is possible).
-
CZipCentralDir::CInfo::m_uCentrDirPos
renamed to
CZipCentralDir::CInfo::m_uEndOffset
.
-
CZipCentralDir::CInfo::m_uThisDisk
renamed to
CZipCentralDir::CInfo::m_uLastVolume
.
-
In
ZipPlatform::WideToSingle()
, the argument
bUseAnsi
replaced with
uCodePage
.
-
In
ZipPlatform::SingleToWide()
, the argument
bUseAnsi
replaced with
uCodePage
.
-
ZipCompatibility::IsBigEndian()
removed.
-
Endianess determined by preprocessor definitions (check out the
_platform.h
file if the value is correct).
-
Endian-aware methods that read and write bytes, moved from the
ZipCompatibility
namespace and encapsulated in the
ZipArchiveLib::CBytesWriter
class.
-
ZipCompatibility::FileNameUpdate()
replaced by the
ZipCompatibility::ConvertBufferToString()
and
ZipCompatibility::ConvertStringToBuffer()
methods.
-
You can remove
ZIP_ARCHIVE_MFC_PROJ
and
ZIP_ARCHIVE_STL_PROJ
preprocessor definitions from your projects.
-
You should define
_ZIP_IMPL_MFC
in your applications that use the MFC version of the ZipArchive Library.
-
You should define
_ZIP_SYSTEM_LINUX
in your applications that use the Linux version of the ZipArchive Library.
- The library uses now Visual Studio 2005 project files by default. Project files for other compilers are available and maintained.
2.4.11 (2006-07-01)
Changes
- The web site rebuilt, which led to links changes in the documentation.
- Minor tweaks.
Bugs Fixed
- Files were opened in the text mode under some gcc versions.
2.4.10 (2006-04-01)
New Features
Changes
-
CZipFileHeader::GetSize()
can only return the size of the info in the central directory.
- The limit of number of archive parts has been changed to 99999 for split archives (the compatibility with other archivers is kept up to 99 parts).
-
CZipArchive::ExtractFile(ZIP_INDEX_TYPE, CZipAbstractFile&)
does not perform moving the current position pointer of the memory file to the end, before writing decompressed data to it. The decompressed data is written at the current file position (existing data may be overwritten) (thanks to Jennis Meyer-Spradow for the suggestion).
Bugs Fixed
-
The
CZipArchive::GetFromArchive()
methods would not work, if a local filename size or an extra field size were different from the corresponding sizes in the central directory.
- Compilation error under gcc-4.1 (thanks to Miroslav Rajcic and Tuncer Ayaz for the fix).
- Problems with directory creation under Linux (thanks to Neil Youngman for the fix).
- Problems with extraction in Zippie (thanks to Neil Youngman for reporting it).
- Zippie was not restoring the global locale. It was not causing problems with Zippie, but nevertheless it is a good practice (thanks to Cecilia Herrera for reporting it).
2.4.9 (2006-02-01)
New Features
-
CZipArchive::SetTreatAsSingleDisk()
added for treating archives that have different volume numbers inside and yet are a single-volume archives.
- Visual Studio .NET 2005 compatibility.
Changes
- The library now decompresses correctly the archive, if the filename in the local file header is different from the filename in the central directory - it was considered an error in the archive so far.
Bugs Fixed
- Renaming files corrupted archive, if a local extra field size was different than the size of the extra filed in the central directory (thanks to Dragan Milic for reporting and the fix).
- Renaming files corrupted archive, if a local filename size was different than the size of the filename in the central directory.
- Renaming files was not reflected in the local header, if the new filename size was the same as the old ones (thanks to Dragan Milic for reporting and the fix).
2.4.8 (2005-10-01)
New Features
-
Users contributions:
- Necessary files for compiling with autotools (thanks to Brian Oxley).
- MinGW makefiles (thanks to Miroslav Rajcic).
- Partial Zip64 support for ZipArchive STL version 2.4.5 (thanks to Andre Pham).
-
Tip on compiling the library for dynamic linking (using
-fPIC
with
CFLAGS
in makefiles) added to the documentation (thanks to Victor Zverovich).
Changes
- The library now uses Visual Studio 2003 projects (Visual Studio 6.0 projects are still available for download separately).
-
Removed check for characters with codes greater than 128 in the
CZipArchive::SetPassword()
method. It restricted the password unnecessarily (thanks to Daniel Yerushalmi for the suggestion).
2.4.7 (2005-08-01)
New Features
- The support for machines with the big-endian architecture added (thanks to Dragan Milic for help).
Bugs Fixed
- Incorrect progress values were reported while saving a central directory and deleting files (thanks Patrick Banks for help).
2.4.6 (2005-07-01)
Changes
2.4.5 (2005-06-01)
Changes
Bugs Fixed
- An exception was thrown when closing an archive and another exception had already been thrown before (thanks to Roman Scherzer for reporting it).
2.4.4 (2005-04-01)
Bugs Fixed
- Corrected problems with compilation under gcc 3.4.2 (thanks to all the people who reported it).
2.4.3 (2005-03-01)
New Features
-
CZipArchive::WideConversionUseAnsi()
added.
Bugs Fixed
-
Crash caused by an invalid date used in
CZipFileHeader::SetModificationTime()
(thanks to Roman Scherzer for reporting it).
- Invalid string handling in Unicode (bug introduced when trying to support languages such as Japanese or Korean - thanks to Mark Gladding for reporting it).
2.4.2 (2005-02-01)
New Features
-
Allowed proper handling of Unicode names in some languages such as Japanese or Korean: added
CZipArchive::EnableOemConversion
(thanks to Michael Frossard for suggestions).
- Split archives can now be extracted (from a non-removable device) by WinZip or WinRar (thanks to Martin Hoefler for the suggestion).
-
The copy constructor added to the
CZipMemFile
class (thanks to Sofia Massimo for suggestion).
Changes
-
The Zlib library updated to version 1.2.2; see
the Zlib library change log
for more information.
- When creating a segmented archive, the whole central directory is placed on a single volume.
- The number of archive parts is now limited to 99 for split archives (for the compatibility with other archivers).
Bugs Fixed
-
Wildcard matching was not handled properly (e.g.
*.exe
was not matched against
a.b.exe
).
- Corrected problems when working on 64 bit platforms (thanks to Miha for noticing it and for most of the fixes).
- Corrected problems with compilation under gcc 3.3.4 (thanks to Miha for the fix).
2.4.1 (2004-06-01)
Changes
-
Workaround for the case when an exception was thrown in
CFile::GetFilePath()
by MFC when working on offline files under Windows XP (thanks to Richard Stooke for spotting and solving this).
2.4.0 (2004-03-01)
Changes
-
The Zlib library updated to version 1.2.1; see
the Zlib library change log
for more information.
-
CZipArchive::CloseFileAfterTestFailed()
renamed to
CZipArchive::CloseFileWithNoUpdate()
.
2.3.6 (2003-11-01)
Bugs Fixed
2.3.5 (2003-09-01)
New Features
Changes
-
CZipArchive::ExtractFile(ZIP_INDEX_TYPE, CZipAbstractFile&)
positions the memory file pointer at the beginning of the compressed data after compression.
-
CZipArchive::AddNewFile()
methods now automatically set the value of the file pointer
CZipAddNewFileInfo::m_pFile
, to the beginning of the file - by calling the
CZipAbstractFile::SeekToBegin()
method (thanks to Michael A. Rusakov for pointing this out).
-
Compatibility with
STLPort
(thanks to Ben Discoe for the changes).
Bugs Fixed
- Compilation errors on Solaris and Linux box gcc 3.2.2 (thanks to Aditya Dwivedula for the fixes).
-
When creating a segmented archive volume, the
.zip
extension was not properly appended.
-
In the
CZipArchive::AddNewFile()
methods, the smartness level was always set to
CZipArchive::zipsmSafeSmart
regardless of
iSmartLevel
parameter (thanks to Antonio Maiorano for reporting).
- Rare problems under Windows with STL version (thanks to Daniel Walton for the fix).
2.3.4 (2003-06-01)
Changes
-
CZipArchive::TestFile()
throws now an exception if the
CZipArchive::CloseFile()
returned
-1
; this way the method works as described in the documentation that an exception is thrown when a file is corrupted (thanks to Silvio Scarpati for pointing this out).
- It is now possible to add an already opened file to an archive (thanks to Kristjan Bjarnason for the change).
Bugs Fixed
- Problems with extracting some archives (very rare) (thanks to Ben Jos Walbeehm for the fix).
- Problems with extracting some archives created under Linux (thanks to Jurgen Marquardt for reporting).
- Small compilation errors under MSVC++ .NET (thanks to Darren Whobrey for the fixes).
- Setting password in the Zippie application (thanks to Amnon David for the fix).
2.3.3 (2003-01-01)
New Features
-
CZipArchive::m_bRemoveDriveLetter
option added.
Bugs Fixed
-
Not extracting files from the last volume when opening an existing split archive, where the last volume filename has other extension than
.zip
.
-
Added
PKZIP_BUG_WORKAROUND
definition to the
zlib.h
file distributed with the ZipArchive Library as well as to the ZipArchive Library project files (in case the Zlib library is replaced with a new version); it deals with PKZIP bug existing in some archives (thanks to Ben Jos Walbeehm for reporting).
2.3.2 (2002-08-01)
Bugs Fixed
- Problem with creating segmented archives in the STL version of the library (thanks to Luiz Rafael Culik for reporting).
2.3.1 (2002-05-01)
Bugs Fixed
-
Using the
CZipMemFile::CZipMemFile(BYTE*, UINT, long)
constructor could cause memory errors (thanks to Laurent Dore).
2.3.0 (2002-04-01)
New Features
- Visual Studio .NET compatibility.
-
CZipArchive::GetFromArchive()
methods added, that allow copying files from another archive without decompressing them.
-
Replacing of files in the archive. It works with
CZipArchive::GetFromArchive()
and the new
CZipArchive::AddNewFile(CZipAddNewFileInfo&)
which was introduced due to increasing parameters count.
-
CZipArchive::RenameFile()
added, which renames a file in an archive maintaining its physical position inside the archive.
- Added projects and necessary changes for compiling ZipArchive as a DLL version (courtesy of Jonathan Reis).
-
CZipArchive::WillBeDuplicated()
added, which lets you check quickly, if the given filename would duplicate an existing one in the archive.
-
CZipArchive::GetCount()
has now an additional parameter and can return the number of files in the archive not counting the directories.
-
CZipArchive::Close()
has now an additional parameter (
bUpdateTimeStamp
) and can set the modification time of the zip archive to the modification time of the newest file inside the archive.
-
CZipArchive::GetIndexes()
added.
- The ZipArc application was updated to support renaming, replacing (as well as updating files in an archive) and getting compressed files from another archive.
Changes
-
The Zlib library updated to version 1.1.4 that fixes the security vulnerability in version 1.1.3 as described in
http://www.zlib.org/advisory-2002-03-11.txt
.
- If a file inside an archive has the wrong date/time stamp set, then the extracted file is given the current time instead of reporting an error.
-
In the
CZipArchive::PredictFileNameInZip()
method, parameter
bAnsiOem
changed to
bExactly
(apart from the name, the meaning has also been changed).
-
CZipArchive::DeleteFiles(const CZipStringArray&)
method.
Bugs Fixed
-
Eliminated possible errors when using
CZipArchive::zipsmCheckForEff
with segmented archives.
-
Reading some files created with other archivers failed occasionally in
CZipFileHeader::ReadLocal()
(thanks to Christian von Seydlitz).
-
While a file recompression (smartness level includes
CZipArchive::zipsmCheckForEff
), if the AutoFlush feature was enabled, there were redundant bytes added to the archive (thanks to Roman Scherzer).
- Aborting extraction of a segmented archive caused errors (thanks to Sabina Terenzi).
- Some GUI fixes in ZipArc.
2.2.0 (2001-10-15)
New Features
- Deleting multiple files from an archive is now much faster - the files are not deleted separately as it was so far, but the library creates a map of holes and continuous areas and moves the data to remain in file over the holes. It means that the data is copied only once and not for every file to delete.
-
Callback functions has been replaced by callback objects to make the code cleaner and to make possible to pass more information during a callback call (see the
CZipArchive::SetCallback()
method for more information). The new solution has proven to be about 15% faster than the previous one.
Please note:
-
This change affects the parameters of the following methods:
-
CZipArchive::AddNewFile()
-
CZipArchive::ExtractFile()
-
CZipArchive::TestFile()
-
CZipArchive::SetSegmCallback()
- The meaning of parameters passed to callback objects is different from the ones passed to the callback functions.
- Added the callback notification when deleting files.
- Added the callback notification when saving the central directory.
-
Added possibility to extract or delete files which filenames match the specified wildcard pattern (see the
CZipArchive::FindMatches()
method for more information).
- Iterating over the central directory elements speeded up (as a result, all operations that iterate the central directory were speeded up, especially sorting, multiple adding, extracting, testing).
- The library no longer throws an exception, if the platform the archive was created under, is not supported, but tries to distinguish files from directories anyway.
-
CZipArchive::Flush()
can be called now for a segmented archive in creation (finalizing it then), and still allowing extracting or testing.
-
CZipArchive::CloseNewFile()
can be called after an exception was thrown, to allow repairing the archive later.
-
Adding files with one of the
CZipArchive::AddNewFile()
methods can be safely aborted in a not segmented archive (the added data is removed from the archive).
-
CZipException::GetErrorMessage()
added for the MFC compatibility.
-
Added parameter
bForce
to
CZipArchive::SetTempPath()
that creates the directory, if it doesn't exists.
- An archive created by the library under Windows can be now correctly extracted under Linux and vice versa without the need for setting the system compatibility for the files.
-
CZipArchive::SetIgnoreCRC()
added to make possible working with Java
TM
Archives (JAR).
-
CZipArchive::GetFindFastIndex()
added.
-
CZipArchive::GetCentralDirInfo()
added.
-
CZipArchive::GetCentralDirSize()
added.
-
CZipArchive::GetCurrentVolume()
added.
-
CZipArchive::IsReadOnly()
added.
-
CZipFileHeader::CompressionEfficient()
added.
-
CZipFileHeader::GetCompressionRatio()
added.
-
const
keywords added to methods.
-
TRACE
messages are now easier to locate in MSVC++ (double clicking gets you directly to the code now).
Changes
Bugs Fixed
-
CZipStorage::Flush()
doesn't call now
m_pFile->Flush()
(it has proven to slow down the archive creation speed significantly) - it is called in different places instead.
-
CZipArchive::TestFile()
sometimes was not detecting an incorrect password.
-
Filenames in archives are now correctly converted after calling
CZipArchive::Flush()
.
-
Fixed the numerical value of the
CZipArchive::zipsmCheckForEffInMem
flag; the bug caused the temporary file to be always created in memory.
-
ZipPlatform::GetDeviceFreeSpace()
was not working on Windows with other devices than removable (in spite of what is written in MSDN, it is sometimes needed to add a slash when passing a drive name to the
GetDiskFreeSpace()
method and sometimes not). This bug was detected on Windows 2000.
- Crash eliminated when a file modification time could not be retrieved (in case of an impossible value e.g. a year is 28980).
- Unix attributes corrected.
-
CZipArchive::ExtractFile()
was passing an incorrect value to the callback method.
2.1.1 (2001-10-01)
New Features
- Linux version at the beta stage (thanks to Luiz Rafael Culik for help).
-
Smart and efficient compression added to the
CZipArchive::AddNewFile
method (see
CZipArchive::Smartness
for more information).
- Integration of the Visual Studio 6.0 help system with MSDN.
- Adding a file with the user-specified filename in zip.
- Adding files from memory and extracting files to memory.
-
CZipArchive::Flush()
added - it increases the safety when working with zip archives (thanks to Brad Kremer for the idea).
-
CZipArchive::SetCaseSensitivity()
added.
-
CZipArchive::PredictFileNameInZip()
added.
-
CZipArchive::PredictExtractedFileName()
added.
-
CZipArchive::FindFile()
speeded up again, the meaning of the case-sensitivity parameter changed, added possibility to find a filename only without a path.
-
CZipArchive::TrimRootPath()
improved.
-
CZipArchive::Close()
allows now writing the central directory to an archive even after an exception, which lets you e.g. attempt to reuse the archive later.
-
Error descriptions - see
CZipException::GetErrorDescription()
.
- STL sample application added (a command line archiver which works for both Windows and Linux.
- In the MFC sample application added a switch in options to allow an effective compression.
- Several minor enhancements.
Changes
-
CZipPathComponent
methods renamed :
GetFullFileName()
->
GetFileName()
,
GetFileName()
->
GetFileTitle()
,
SetFileName()
->
SetFileTitle()
.
-
The file
__[...].zcfg
is created depending on the current configuration when using scripts to copy platform dependent files.
Bugs Fixed
-
When performing a non case-sensitive search with the
CZipArchive::FindFile()
method (thanks to Kenny Prole).
-
In
CZipString
(STL) when using a different locale than English and non-English characters.
-
CZipStorage::Flush()
calls now
m_pFile->Flush()
as well (it might have caused zip creation problems sometimes).
1.6.6 (2001-08-01)
New Features
-
The
CZipPathComponent
class understands now a UNC path, so it is possible to extract files over a network (other operations over a network were already possible).
Changes
- The sample application updated to reflect previous (version 1.6.5) and current changes.
1.6.5 (2001-07-01)
New Features
-
CZipArchive::SetRootPath()
added that allows more flexible path manipulations when using
CZipArchive::AddNewFile()
or
CZipArchive::ExtractFile()
and their overrides.
-
Ability to set an archive system compatibility to a value different
than the current system ID with the
CZipArchive::SetSystemCompatibility()
method.
Bugs Fixed
- If the file had the read-only attribute set, the time stamp of an extracted file was not updated and an exception was thrown, (thanks to Arnon Meydav).
- Invalid Unix attributes conversion.
- Directories inside an archive are now recognized properly by Unix archivers if the archive was created for Unix platform.
1.6.4 (2001-06-01)
Bugs Fixed
-
Fixed errors that made impossible using the
CZipMemFile
class and creation of archives in memory.
1.6.3 (2001-05-01)
Changes
- The Zlib library sources incorporated into the ZipArchive Library projects
(it eliminates most often link errors).
1.6.2 (2001-04-01)
New Features
- Added a simple protection against compiling MFC or STL version without copying the proper files first.
- Added several preprocessor directives for Borland compilers.
Bugs Fixed
1.6.1 (2001-03-01)
New Features
- STL version of the library.
- Porting to different platforms made easier.
- Possibility to read zip files created on other platforms than Windows (correct interpretation of file and directory attributes).
-
Doxygen
generated documentation.
Changes
- LICENSING CHANGED.
- Overall tuning.
- Sample application updated.
1.5.1 (2001-02-01)
New Features
- Ability to reuse an archive after an exception was thrown during extraction.
-
Added progress notifications to
CZipArchive::AddNewFile()
,
CZipArchive::ExtractFile()
,
CZipArchive::TestFile()
.
-
When the central directory cannot be located, the library throws
CZipException::cdirNotFound
, which allows distinguishing from other exceptions.
Changes
-
Improved performance of the
CZipArchive::FindFile()
method (thanks to Darin Warling).
- The library name changed to ZipArchive.
- The sample application updated.
Bugs Fixed
- Incorrect extracting of an encrypted file of 0 size.
- Incorrect extracting a file with an extra field in a local file header.
1.4.1 (2001-01-01)
New Features
-
Adding and extracting without a full path in
CZipArchive::AddNewFile
and
CZipArchive::ExtractFile
.
Changes
- Disk naming in a spanned archive begins now with PKBACK# 001 not PKBACK# 000.
- Several minor changes.
1.3.1 (2000-11-01)
New Features
- Testing of archives made easier.
- Added support for password encryption and decryption.
- Support for compiling the sources for Unicode.
1.2.2 (2000-08-01)
Bugs Fixed
- Several minor bugs fixed.
1.2.1 (2000-06-01)
New Features
- The code has been completely rewritten from the very beginning.
- Support for archive segmentation.
- Creation of segmented archives with the user-defined volume size.
- Ability to modify existing archives (add, delete files).
- Modification of self-extracting archives.
- Write buffer used for faster disk write operations.
- One class for zip and unzip functions.
- Fast adding, deleting and extracting files with a single method call.
1.1.3 (2000-03-01)
Bugs Fixed
- International characters in filenames inside archive are now
converted in a compatible way with other archiving programs (they are stored
converted to an OEM code page inside an archive).
1.1.1 (2000-01-01)
New Features
-
The first version. It is just a modified code from
zip.c and
unzip.c
files
written by Gilles Vollant and distributed with the Zlib library.
- Added class' wrappers.
- MFC support added.
- Memory leaks eliminated when write error occurred.
- Automatic freeing of the used memory on destruction or exception.
- Error notification using exceptions instead of return codes.
- Some enhancements added.
Bugs Fixed
- Several minor bugs fixed.