ver 2.4.10 (04-2006)
Bugs fixed:
- CZipArchive::GetFromArchive 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 zippie extraction (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)
Changes
- CZipFileHeader::GetSize public method can only return the size of the info in the central directory
- the limit of number of archive parts has been changed to 99999 in TDSpan mode (the compatibility with other archivers is kept up to 99 parts)
- method CZipArchive::ExtractFile(WORD, CZipMemFile&, bool, DWORD) does not perform changing the current position of the memory file to the end before writing decompressed data to it - decompressed data is written at the current file position (existing data may be overwritten) (thanks to Jennis Meyer-Spradow for the suggestion)
Features added:
ver 2.4.9 (02-2006)
Features added:
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 so far
Bugs fixed:
- renaming files corrupted archive if local extra field size was different than the size of extra filed in the central directory (thanks to Dragan Milic for reporting and the fix)
- renaming files corrupted archive if 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 one's (thanks to Dragan Milic for reporting and the fix)
ver 2.4.8 (10-2005)
Users contributions:
- necessary files for compiling with autotools (thanks to Brian Oxley)
- partial Zip64 support for ZipArchive STL version 2.4.5 (thanks to Andre Pham)
- MinGW makefiles (thanks to Miroslav Rajcic)
- Tip on compiling the library for dynamic linking (using -fPIC with CFLAGS in makefiles) added to Readme.txt (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 less than 0 in CZipArchive::SetPassword. It restricted password unnecessarily (thanks to Daniel Yerushalmi for suggestion).
ver 2.4.7 (08-2005)
Features added:
- added support for machines with the big-endian architecture (thanks to Dragan Milic for help)
Bugs fixed:
- incorrect progress values while saving central directory and deleting files (thanks Patrick Banks for help)
ver 2.4.6 (07-2005)
Changes:
ver 2.4.5 (06-2005)
Changes:
Bugs fixed:
- exception thrown when closing an archive if another exception was thrown before (thanks to Roman Scherzer for reporting it)
ver 2.4.4 (04-2005)
Bugs fixed:
- corrected problems with compilation under gcc 3.4.2 (thanks to all the people that reported it)
ver 2.4.3 (03-2005)
Features added:
Bugs fixed:
- crash caused by an invalid date used in CZipFileHeader::SetTime (thanks to Roman Scherzer for reporting it)
- invalid handling of strings in UNICODE (bug introduced when trying to support languages such as Japanese or Korean - thanks to Mark Gladding for reporting it).
ver 2.4.2 (02-2005)
Features added:
- allowed proper handling of UNICODE names in some languages such as Japanese or Korean: added CZipArchive::EnableOemConversion, which needs to be called with the argument set to
false
for these languages (thanks to Michael Frossard for suggestions). - an archive created in TDSpan mode can now be extracted (from non-removable device) by WinZip or WinRar (thanks to Martin Hoefler for the suggestion).
- copy constructor added to CZipMemFile (suggested by Sofia Massimo)
Changes:
- zlib library updated to version 1.2.2. See the zlib library change log.
- when creating a disk spanning archive, the whole central directory is placed on a single volume
- the number of archive parts is now limited to 99 in TDSpan mode (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 with 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)
ver 2.4.1 (06-2004)
Workarounds:
- exception thrown in CFile::GetFilePath() by MFC when working on offline files under Windows XP (thanks to Richard Stooke for spotting and solving this).
ver 2.4.0 (03-2004)
Changes:
ver 2.3.6 (11-2003)
Bugs fixed:
ver 2.3.5 (09-2003)
Features added:
Changes:
Bugs fixed:
- compilation errors on Solaris and Linux box gcc 3.2.2 (thanks to Aditya Dwivedula for the fixes)
- when creating multi-disk volume, the 'zip' extension was not properly appended
- in methods CZipArchive::AddNewFile(LPCTSTR,int,bool,int, unsigned long), CZipArchive::AddNewFile(LPCTSTR,LPCTSTR,int,int, unsigned long) and CZipArchive::AddNewFile(CZipMemFile& mf,LPCTSTR,int,int, unsigned long) the smartnes 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)
ver 2.3.4 (06-2003)
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 Jürgen Marquardt for reporting)
- small compilation errors under MSVC++ .NET (thanks to Darren Whobrey for the fixes)
- setting password in zippie (thanks to Amnon David for the fix)
Changes:
- CZipArchive::TestFile throws an exception now if CZipArchive::CloseFile returned -1. It makes it work as described in the documentation that an exception is thrown when the 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)
ver 2.3.3 (01-2003)
Features added:
Bugs fixed:
- not extracting files from the last volume when opening an existing archive created in TDSpan mode, where the last volume filename has other extension than ".zip"
- added PKZIP_BUG_WORKAROUND definition to the zlib.h file distributed with ZipArchive library as well as to ZipArchive 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).
ver 2.3.2 (08-2002)
Bug fixed:
- problem with creating disk spanning archives in the STL version of the library (thanks to Luiz Rafael Culik for reporting)
ver 2.3.1 (05-2002)
Bug fixed:
- using CZipMemFile::CZipMemFile(BYTE* , UINT , long ) constructor could cause memory errors (thanks to Laurent Doré)
ver 2.3 (04-2002) (includes changes and fixes from 2.2a to 2.2c)
Features added:
- Visual Studio .NET compatibility
- methods CZipArchive::GetFromArchive added, which allow copying files from another archive without decompressing them
- many times requested replacing of files in the archive feature; it works with methods CZipArchive::GetFromArchive and a new CZipArchive::AddNewFile(CZipAddNewFileInfo& ) which was introduced due to increasing parameters count
- added method CZipArchive::RenameFile which renames a file in the archive maintaining its physical position inside the archive
- projects and necessary changes for compiling ZipArchive as a DLL version (courtesy of Jonathan Reis) - see DLL version and Compiling as DLL
( they are not embedded into existing ones, but made separated, since the DLL version needs separated project for zlib.dll and for the static version, zlib library is already included in the projects to minimize linking problems with applications) - added CZipArchive::WillBeDuplicated 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 been given also 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
- method CZipArchive::GetIndexes added
- ZipArc application updated to support renaming, replacing (as well as updating files in the archive) and getting compressed files from another archive
Changes:
Bugs fixed:
- eliminated possible errors when using CZipArchive::zipsmCheckForEff with disk-spanning mode
- reading some files created with other archivers failed occasionally in CZipFileHeader::ReadLocal (thanks to Christian von Seydlitz)
- while a file recompression (smartness level included CZipArchive::zipsmCheckForEff) if the AutoFlush feature was enabled, there were redundant bytes added to the archive (thanks to Roman Scherzer)
- aborting extraction of multi-disk archive caused errors (thanks to Sabina Terenzi)
- some GUI fixes in ZipArc
Known issues:
- under Windows XP, in TD disk spanning mode, when the central directory is not entirely written on the last volume (but divided between volumes), SHGetFileInfo hangs up (it is used i.e. by CFileDialog::DoModal) - Windows probably tries to analize zip structure, but fails becuase it is an additional feature of ZipArchive library to create multi volume archives on non-removable data storage
ver 2.2 (10-2001) Time for global changes
Features added:
- deleting multiple files from the archive is now way 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 it possible to pass more information during a callback call (see CZipArchive::SetCallback). The same application written using the library with callback functions and then with functional objects as callbacks (slightly modified) has proven to be circa 15% faster in the latter case (that's why it's in features), inter alia because only data that changes is passed to the callback method, method derived from CZipCallback::Callback can be inlined if defined inside the class declaration). Important issues:
- it affects the following functions parameters:
- the meaning of the parameters passed to a callback objects is different from that what has so far been passed to the callback functions (see CZipCallback)
- added callback feature when deleting files
- added callback feature when saving central directory
- added possibility to extract or delete files which filenames match the specified wildcard pattern (see CZipArchive::FindMatches)
- iterating the central directory elements speeded up (hence all the operations that iterate the central directory were speeded up, especially sorting, multiple adding, extracting, testing)
- the library now doesn't throw an exception if the platform the archive was created under is not supported, but it tries to distinguish files from directories
- CZipArchive::Flush can be called now for a disk-spanning archive in creation finalizing it then, and yet allows extracting or testing (see the function description for more)
- function CZipArchive::CloseNewFile can be called after an exception to allow to repair the archive later
- adding files with one of CZipArchive::AddNewFile functions can be safely aborted in a non-disk-spanning archive (the added data is removed from the archive)
- added function CZipException::GetErrorMessage for compatibility with MFC
CException::GetErrorMessage
- added parameter bForce to CZipArchive::SetTempPath that creates the directory if it doesn't exists
- the archive created with the library under Windows can be now correctly extracted under Linux and vice versa without the need for setting the system compatibility of the files
- function CZipArchive::SetIgnoreCRC added to make possible working with the Java TM Archives (jar)
- function CZipArchive::GetFindFastIndex added
- function CZipArchive::GetCentralDirInfo added
- function CZipArchive::GetCentralDirSize added
- function CZipArchive::GetCurrentDisk added
- function CZipArchive::IsReadOnly added
- function CZipFileHeader::CompressionEfficient added
- function CZipFileHeader::GetCompressionRatio added
const
keywords added to functions- TRACE messages are now easier to locate in MSVC++ (double clicking gets you directly to the code now)
Changes:
- if the callback object's method
Callback
returns false
, a CZipException is thrown with code CZipException::abortedAction or CZipException::abortedSafely; - function CZipArchive::DeleteFiles(const CZipStringArray) uses now FindFast array; added bFileNameOnly parameter
- function CZipArchive::GetNoEntries renamed to GetCount (more standard, easier to type and easier to find at the beginning)
- the encrypted file is not recompressed again if the difference in sizes before and after compression is the length of the encryption header
- function CZipArchive::OpenFile throws exception CZipException::badPassword if the password was not set for the encrypted file instead of returning
false
; - versioning shortened
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 wrong password set
- filenames in zip are now correctly converted after calling CZipArchive::Flush
- fixed value of CZipArchive::zipsmCheckForEffInMem; the bug cause 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 slash when passing drive name to
GetDiskFreeSpace
and sometimes not). I'm not sure if this bug concerned all Windows platforms (it was detected on Windows 2000) - crash eliminated when the file modification time could not be retrieved (in case of an impossible value e.g. a year is 28980)
- Unix attributes corrected
- CZipArchive::ExtractFile had wrong value passed to the callback function
ver 2.1.1 (10-2001)
Features added:
- Linux version at the beta stage (thanks to Luiz Rafael Culik for help)
- smart and efficient compression added to CZipArchive::AddNewFile
inter alia optional compression to a temporary file first or to memory, in a disk spanning mode, to see whether the file is smaller after compression and if it is not then add it without the compression (see also CZipArchive::Smartness) - integration of the help system with MSDN made possible (see Integrating with MSDN (Visual Studio 6.0 only))
- adding a file with the user-specified filename in zip (
CZipArchive::AddNewFile(LPCTSTR , LPCTSTR , int , int , unsigned long )
) - adding files from memory and extracting files to memory (
CZipArchive::AddNewFile(CZipMemFile&, LPCTSTR, int, int, unsigned long)
and CZipArchive::ExtractFile(WORD, CZipMemFile&, DWORD)
) - function CZipArchive::Flush added - increases the safety when working with zip archives (thanks to Brad Kremer for the idea)
- function CZipArchive::SetCaseSensitivity added (see the function description which functions it affects)
- function CZipArchive::PredictFileNameInZip added
- function CZipArchive::PredictExtractedFileName added
- function CZipArchive::FindFile speeded up again, the case-sensitivity parameter meaning changed, added possibility to find a filename only without a path (see the function description)
- function CZipArchive::TrimRootPath function improved
- function CZipArchive::Close allows now to write the central directory to the archive even after exception, which lets you e.g. repair the archive later
- obtaining error descriptions (English only) - see CZipException::GetErrorDescription()
- STL sample application added (a command line archiver which works for both Windows and Linux; located in stl/zippie)
- in TestZipDlg sample application added switch in options to allow an effective compression
- several minor enhancements
Changes:
Bugs fixed:
- when performing a non-case-sensitive search with CZipArchive::FindFile (thanks to Kenny Prole)
- in CZipString (STL) when using a different locale than English and non-English characters (see STL version for info on how to set your locale in the program)
- CZipStorage::Flush call now m_pFile->Flush() as well (it might have caused a zip creation problems sometimes)
ver 1.6.6 (08-2001)
Features added:
- CZipPathComponent understands now a UNC path, so it is possible to extract files over a network (other operations over a network were already possible)
- sample application updated to reflect previous (ver 1.6.5) and current changes (necessary prefix added to a UNC path following the Windows File Name Conventions : see FAQ)
ver 1.6.5 (07-2001)
Features added:
Bugs fixed:
- bug which caused not updating the time stamp of an extracted file and an exception being thrown, if the file had the read-only attribute set (thanks to Arnon Meydav)
- bugs in conversion of Unix attributes
- directories inside the archive are now recognized properly by Unix archivers if the archive was created for Unix platform
ver 1.6.4 (06-2001)
- fixed errors that made impossible using CZipMemFile class and creation of the archives in memory
ver 1.6.3 (05-2001)
- zlib library sources incorporated into ZipArchive library projects (eliminates most often link errors)
ver 1.6.2 (04-2001)
- ZipPlatform::SetVolLabel() appends now a directory separator to the drive name (lack of it caused errors sometimes)
- added a simple protection against compiling MFC or STL version without copying the proper files first
- added several preprocessor directives for Borland compilers
ver 1.6.1 (03-2001)
Features added:
- non MFC dependent version (STL)
- porting to different platforms made easier
- possibility to read zip files created on other platforms than Windows (correct interpretation of file/directory attributes)
- documentation generated (using Doxygen )
Changes:
- LICENSING CHANGED
- overall tuning
- sample application updated
ver 1.5.1 (02-2001)
Features added:
Changes:
- CZipArchive::FindFile operation boosted (thanks to Darin Warling)
- library name changed to ZipArchive
- the sample application updated
Bugs fixed:
- removed bug during extracting an encrypted file with 0 size
- fixed bug when extracting a file with an extra field in a local file header (CFileHeader::ReadLocal)
ver 1.4.1 (01-2001)
- Disk numbering in a disk spanning archive begins now from PKBACK# 001 not PKBACK# 000
- Adding and extracting without a full path possible in CZipArchive::AddNewFile and CZipArchive::ExtractFile.
- Several minor changes and enhancements
- Changed names for several classes.
ver 1.3.1 (11-2000)
- Testing the archive made easier
- Added support for password encryption and decryption. The encryption used in PKZIP was generously supplied by Roger Schlafly.
- Support for compiling the sources for Unicode added
ver 1.2.2 (08-2000)
ver 1.2.1 (06-2000)
- the code has been completely rewritten from the very beginning; the main improvements are:
- multi-disk archive support
- creation of the disk spanning archives with the user-defined volume size
- ability to modify existing archives (add, delete files)
- modification 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 function call
ver 1.1.2 (03-2000)
- international characters in filenames inside archive are now converted in a compatible way with other archiving programs (they are stored converted to OEM inside archive).
ver 1.1.1 (01-2000)
- the first version; it is just modified code from zip.c and unzip.c files written by Gilles Vollant and distributed with zlib library; the modifications are as follows:
- added class' wrappers
- several bugs fixed
- several enhancements added
- MFC support added
- memory leaks eliminated when write error occurred
- automatically free used memory on destruction or exception
- modern error notification using exceptions
ZipArchive Copyright © 2000 - 2006 Tadeusz Dracz . Generated at Fri Apr 7 13:55:25 2006.