When zipping, the file properties like
static void Example() { // Select a source folder AbstractFolder folder = new DiskFolder( @"DataFolderToZip" ); // Select a zip file AbstractFile zipFile = new DiskFile( @"ZipChangeMetadataInEvent.zip" ); // If the zip file already exists if( zipFile.Exists ) { // Delete it zipFile.Delete(); } // Wrap a logical zip archive around the zip file ZipArchive zip = new ZipArchive( zipFile ); // Create events ZipEvents zipEvents = new ZipEvents(); // Assign our method to handle the event where an item has completed processing zipEvents.ItemCompletion += new ItemProgressionEventHandler( OnItemCompletion ); // Start a zip batch operation using( AutoBatchUpdate update = new AutoBatchUpdate( zip ) ) { /* We get the current date/time once here to avoid getting it on each zipped item. It could hinder performance */ // Get the current date/time DateTime now = DateTime.Now; // Zip the source files, hooking in events and a maximum allowable date/time as user data folder.CopyFilesTo( zipEvents, now, zip, true, true ); } } static void OnItemCompletion( object sender, ItemProgressionEventArgs e ) { /* At this point, the item has been zipped but it is still safe and efficient to update its metadata like * the last write date/time. Headers will simply be updated. The item's data will not need to be compressed * again */ // Get the maximum allowable date/time for our zipped item DateTime maxAllowedDateTime = ( DateTime ) e.UserData; // If the zipped item has a last write date/time that is unacceptable to us if( e.TargetItem.LastWriteDateTime > maxAllowedDateTime ) e{ // Express the item as a ZippedFile ZippedFile zippedFile = ( ZippedFile ) e.TargetItem; /* The only situation where changing the last write date/time will not work if it the item was * zipped with "Zip Compatible encryption". This is a deprecated, not secure algorithm and should not be * used in new code anyway. Since zipping is under our control here, it will not happen. */ System.Diagnostics.Debug.Assert( !( zippedFile.Encrypted && zippedFile.EncryptionMethod == EncryptionMethod.Compatible ) ); // Update the zipped item last write date/time to our acceptable value zippedFile.LastWriteDateTime = maxAllowedDateTime; /* TODO: Other properties can be changed here too */ // zippedFile.CreationDateTime = myDate; // zippedFile.LastAccessDateTime = myDate; // zippedFile.Comment = "My comment"; // zippedFile.Name = "My name"; // zippedFile.ExtraHeaders = myExtraHeaders; // zippedFile.EncryptionPassword = "My password"; // zippedFile.EncryptionMethod = myMethod; // zippedFile.EncryptionStrength = myStrenngth; // zippedFile.CompressionMethod = myCompressionMethod; // zippedFile.CompressionLevel = myCompressionLevel; } }
Private Shared Sub Example() ' Select a source folder Dim folder As AbstractFolder = New DiskFolder("DataFolderToZip") ' Select a zip file Dim zipFile As AbstractFile = New DiskFile("ZipChangeMetadataInEvent.zip") ' If the zip file already exists If zipFile.Exists Then ' Delete it zipFile.Delete() End If ' Wrap a logical zip archive around the zip file Dim zip As New ZipArchive(zipFile) ' Create events Dim zipEvents As New ZipEvents() ' Assign our method to handle the event where an item has completed processing AddHandler zipEvents.ItemCompletion, AddressOf OnItemCompletion ' Start a zip batch operation Using update As New AutoBatchUpdate(zip) ' We get the current date/time once here to avoid getting it on each zipped item. It could hinder performance ' Get the current date/time Dim now As DateTime = DateTime.Now ' Zip the source files, hooking in events and a maximum allowable date/time as user data folder.CopyFilesTo(zipEvents, now, zip, True, True) End Using End Sub Private Shared Sub OnItemCompletion(ByVal sender As Object, ByVal e As ItemProgressionEventArgs) ' At this point, the item has been zipped but it is still safe and efficient to update its metadata like ' * the last write date/time. Headers will simply be updated. The item's data will not need to be compressed ' * again ' Get the maximum allowable date/time for our zipped item Dim maxAllowedDateTime As DateTime = CDate(e.UserData) ' If the zipped item has a last write date/time that is unacceptable to us If e.TargetItem.LastWriteDateTime > maxAllowedDateTime Then ' Express the item as a ZippedFile Dim zippedFile As ZippedFile = CType(e.TargetItem, ZippedFile) ' The only situation where changing the last write date/time will not work if it the item was ' * zipped with "Zip Compatible encryption". This is a deprecated, not secure algorithm and should not be ' * used in new code anyway. Since zipping is under our control here, it will not happen. System.Diagnostics.Debug.Assert(Not (zippedFile.Encrypted AndAlso zippedFile.EncryptionMethod Is EncryptionMethod.Compatible)) ' Update the zipped item last write date/time to our acceptable value zippedFile.LastWriteDateTime = maxAllowedDateTime End If End Sub