|
3 | 3 | using System;
|
4 | 4 | using System.IO;
|
5 | 5 | using static ICSharpCode.SharpZipLib.Zip.Compression.Deflater;
|
| 6 | +using static ICSharpCode.SharpZipLib.Zip.ZipEntryFactory; |
6 | 7 |
|
7 | 8 | namespace ICSharpCode.SharpZipLib.Zip
|
8 | 9 | {
|
@@ -188,6 +189,29 @@ public enum Overwrite
|
188 | 189 |
|
189 | 190 | #region Constructors
|
190 | 191 |
|
| 192 | + /// <summary> |
| 193 | + /// Initialise a new instance of <see cref="FastZip"/> using the specified <see cref="TimeSetting"/> |
| 194 | + /// </summary> |
| 195 | + /// <param name="timeSetting">The <see cref="TimeSetting">time setting</see> to use when creating or extracting <see cref="ZipEntry">Zip entries</see>.</param> |
| 196 | + /// <remarks>Using <see cref="TimeSetting.LastAccessTime">TimeSetting.LastAccessTime</see><see cref="TimeSetting.LastAccessTimeUtc">[Utc]</see> when |
| 197 | + /// creating an archive will set the file time to the moment of reading. |
| 198 | + /// </remarks> |
| 199 | + public FastZip(TimeSetting timeSetting) |
| 200 | + { |
| 201 | + entryFactory_ = new ZipEntryFactory(timeSetting); |
| 202 | + restoreDateTimeOnExtract_ = true; |
| 203 | + } |
| 204 | + |
| 205 | + /// <summary> |
| 206 | + /// Initialise a new instance of <see cref="FastZip"/> using the specified <see cref="DateTime"/> |
| 207 | + /// </summary> |
| 208 | + /// <param name="time">The time to set all <see cref="ZipEntry.DateTime"/> values for created or extracted <see cref="ZipEntry">Zip Entries</see>.</param> |
| 209 | + public FastZip(DateTime time) |
| 210 | + { |
| 211 | + entryFactory_ = new ZipEntryFactory(time); |
| 212 | + restoreDateTimeOnExtract_ = true; |
| 213 | + } |
| 214 | + |
191 | 215 | /// <summary>
|
192 | 216 | /// Initialise a default instance of <see cref="FastZip"/>.
|
193 | 217 | /// </summary>
|
@@ -733,7 +757,39 @@ private void ExtractFileEntry(ZipEntry entry, string targetName)
|
733 | 757 |
|
734 | 758 | if (restoreDateTimeOnExtract_)
|
735 | 759 | {
|
736 |
| - File.SetLastWriteTime(targetName, entry.DateTime); |
| 760 | + switch (entryFactory_.Setting) |
| 761 | + { |
| 762 | + case TimeSetting.CreateTime: |
| 763 | + File.SetCreationTime(targetName, entry.DateTime); |
| 764 | + break; |
| 765 | + |
| 766 | + case TimeSetting.CreateTimeUtc: |
| 767 | + File.SetCreationTimeUtc(targetName, entry.DateTime); |
| 768 | + break; |
| 769 | + |
| 770 | + case TimeSetting.LastAccessTime: |
| 771 | + File.SetLastAccessTime(targetName, entry.DateTime); |
| 772 | + break; |
| 773 | + |
| 774 | + case TimeSetting.LastAccessTimeUtc: |
| 775 | + File.SetLastAccessTimeUtc(targetName, entry.DateTime); |
| 776 | + break; |
| 777 | + |
| 778 | + case TimeSetting.LastWriteTime: |
| 779 | + File.SetLastWriteTime(targetName, entry.DateTime); |
| 780 | + break; |
| 781 | + |
| 782 | + case TimeSetting.LastWriteTimeUtc: |
| 783 | + File.SetLastWriteTimeUtc(targetName, entry.DateTime); |
| 784 | + break; |
| 785 | + |
| 786 | + case TimeSetting.Fixed: |
| 787 | + File.SetLastWriteTime(targetName, entryFactory_.FixedDateTime); |
| 788 | + break; |
| 789 | + |
| 790 | + default: |
| 791 | + throw new ZipException("Unhandled time setting in ExtractFileEntry"); |
| 792 | + } |
737 | 793 | }
|
738 | 794 |
|
739 | 795 | if (RestoreAttributesOnExtract && entry.IsDOSEntry && (entry.ExternalFileAttributes != -1))
|
@@ -807,7 +863,39 @@ private void ExtractEntry(ZipEntry entry)
|
807 | 863 | Directory.CreateDirectory(dirName);
|
808 | 864 | if (entry.IsDirectory && restoreDateTimeOnExtract_)
|
809 | 865 | {
|
810 |
| - Directory.SetLastWriteTime(dirName, entry.DateTime); |
| 866 | + switch (entryFactory_.Setting) |
| 867 | + { |
| 868 | + case TimeSetting.CreateTime: |
| 869 | + Directory.SetCreationTime(dirName, entry.DateTime); |
| 870 | + break; |
| 871 | + |
| 872 | + case TimeSetting.CreateTimeUtc: |
| 873 | + Directory.SetCreationTimeUtc(dirName, entry.DateTime); |
| 874 | + break; |
| 875 | + |
| 876 | + case TimeSetting.LastAccessTime: |
| 877 | + Directory.SetLastAccessTime(dirName, entry.DateTime); |
| 878 | + break; |
| 879 | + |
| 880 | + case TimeSetting.LastAccessTimeUtc: |
| 881 | + Directory.SetLastAccessTimeUtc(dirName, entry.DateTime); |
| 882 | + break; |
| 883 | + |
| 884 | + case TimeSetting.LastWriteTime: |
| 885 | + Directory.SetLastWriteTime(dirName, entry.DateTime); |
| 886 | + break; |
| 887 | + |
| 888 | + case TimeSetting.LastWriteTimeUtc: |
| 889 | + Directory.SetLastWriteTimeUtc(dirName, entry.DateTime); |
| 890 | + break; |
| 891 | + |
| 892 | + case TimeSetting.Fixed: |
| 893 | + Directory.SetLastWriteTime(dirName, entryFactory_.FixedDateTime); |
| 894 | + break; |
| 895 | + |
| 896 | + default: |
| 897 | + throw new ZipException("Unhandled time setting in ExtractEntry"); |
| 898 | + } |
811 | 899 | }
|
812 | 900 | }
|
813 | 901 | else
|
|
0 commit comments