Bug fixes and minor changes
- Common exceptions thrown after the FileSystemEvents.ItemException event now preserve the original stack trace to aid debugging. If the exception was changed in the event handler, it is thrown as-is.
- Tar: Added a special method that Untars tar and tgz archives much faster. Use method Xceed.Tar.Streaming.StreamingTar.Untar(). Note that it only allows extracting all files recursively.
- Fixed a bug where empty AES-encrypted files added to a new archive caused a FileSystemInternalException to be thrown.
- Fixed a bug where renaming a ZippedFile to a name used by a deleted ZippedFile threw an exception.
- Fixed a bug where zipped items encrypted with compatible encryption sometimes failed to decrypt if their last modified time was midnight and the FileTimes extra header was used.
- ZipReader now throws new exception class Xceed.Zip.ReaderWriter.InvalidZipStructureException when invalid zip structure data is encountered. Although this is technically a breaking change, the exception class derives from ZipReaderException, which should preserve existing behavior.
- Increased speed of WinZipAES encryption and decryption when a large number of items are processed in an update or a read operation.
- Fixed a bug where an ItemDoesNotExistException was thrown when AbstractFolder.CreateFolder() or FileSystemItem.Create() was called during creation of a new split ZipArchive.
- Fixed a bug where a IOException is incorrectly thrown for items backed by a non-seekable stream.
- Fixed a bug where incorrect compressed/uncompressed sizes are used for Zip64 items that have a descriptor header
- Now allows reading disk files that are already opened by other applications. This is done via new properties DefaultAutomaticReadDiskFileShare and DefaultAutomaticWriteDiskFileShare in DiskFile. For example, to zip opened disk files, set DiskFile.DefaultAutomaticReadDiskFileShare to FileShare.ReadWrite.
Interface changes
- Added RelativeOffset and HeaderSize properties for ZippedFile and ZippedFolder.
- Added AbstractFolder.CopyItemsTo() and AbstractFolder.MoveItemsTo() methods to allow easy copy/move operations that include empty subfolders.