public ZipFileBuilder(Stream outStream) { zipStream = new ZipOutputStream(outStream); zipStream.SetLevel(9); //best compression factory = new ZipEntryFactory(DateTime.Now); }
/// <summary> /// Support UTF8 /// Create list files /// </summary> /// <param name="zip">Zip.</param> /// <param name="zipPath">Zip path.</param> /// <param name="srcDir">Source dir.</param> /// <param name="srcFiles">Source files.</param> /// <param name="deleteSrcFiles">If set to <c>true</c> delete source files.</param> /// <param name="removedFiles">remove files are added to the list file</param> public static void CreateZipAndList(this FastZip zip, string zipPath, string srcDir, IEnumerable <FileInfo> srcFiles, bool deleteSrcFiles, IEnumerable <string> removedFiles = null) { string zipName = PathUtil.GetFileNameWithoutExt(zipPath) + ".zip"; // Compress List <string> paths = new List <string>(); foreach (FileInfo f in srcFiles) { paths.Add(f.FullName); } // Generate MD5 digest for assets StringBuilder zipFilter = new StringBuilder(); StringBuilder fileListStr = new StringBuilder(); fileListStr.Append(DownloadList.ZIP_HEADER).Append(zipName).Append("\n"); // create zip filter and file list foreach (FileInfo f in srcFiles) { string fullPath = f.FullName; string relativePath = PathUtil.GetRelativePath(fullPath, srcDir); zipFilter.Append(relativePath).Append("$;"); fileListStr.Append(DownloadList.ZIP_ENTRY_HEADER); AddDigest(fileListStr, relativePath, fullPath); } // add remove list foreach (string r in removedFiles) { fileListStr.Append(DownloadList.DELETE_HEADER).Append(r).Append("\n"); } zipFilter.Replace(@"\", @"\\"); // Zipping TextReplacer replace = new TextReplacer(); replace.AddReplaceToken(@"\(", @"\("); replace.AddReplaceToken(@"\)", @"\)"); replace.AddReplaceToken(@"\+", @"\+"); replace.AddReplaceToken(@"\.", @"\."); ZipEntryFactory ef = zip.EntryFactory as ZipEntryFactory; ef.IsUnicodeText = true; string filter = replace.Replace(zipFilter.ToString()); UnityEngine.Debug.Log("srcdir:" + srcDir); UnityEngine.Debug.Log("filter:" + filter); zip.CreateZip(zipPath, srcDir, true, filter); if (deleteSrcFiles) { foreach (string deletePath in paths) { File.Delete(PathUtil.Combine(PathUtil.Combine(srcDir, deletePath))); } } File.WriteAllText(PathUtil.ReplaceExtension(zipPath, ".bytes"), fileListStr.ToString()); }
/// <summary> /// Initialise a new instance of <see cref="FastZip"/> using the specified <see cref="DateTime"/> /// </summary> /// <param name="time">The time to set all <see cref="ZipEntry.DateTime"/> values for created or extracted <see cref="ZipEntry">Zip Entries</see>.</param> public FastZip(DateTime time) { entryFactory_ = new ZipEntryFactory(time); restoreDateTimeOnExtract_ = true; }
/// <summary> /// Initialise a new instance of <see cref="FastZip"/> using the specified <see cref="TimeSetting"/> /// </summary> /// <param name="timeSetting">The <see cref="TimeSetting">time setting</see> to use when creating or extracting <see cref="ZipEntry">Zip entries</see>.</param> /// <remarks>Using <see cref="TimeSetting.LastAccessTime">TimeSetting.LastAccessTime</see><see cref="TimeSetting.LastAccessTimeUtc">[Utc]</see> when /// creating an archive will set the file time to the moment of reading. /// </remarks> public FastZip(TimeSetting timeSetting) { entryFactory_ = new ZipEntryFactory(timeSetting); restoreDateTimeOnExtract_ = true; }
public void UnicodeText() { FastZip zippy = new FastZip(); ZipEntryFactory factory = new ZipEntryFactory(); factory.IsUnicodeText = true; zippy.EntryFactory = factory; string tempFilePath = GetTempFilePath(); Assert.IsNotNull(tempFilePath, "No permission to execute this test?"); const string tempName1 = "a.dat"; string addFile = Path.Combine(tempFilePath, tempName1); MakeTempFile(addFile, 1); try { MemoryStream target = new MemoryStream(); zippy.CreateZip(target, tempFilePath, false, tempName1, null); MemoryStream archive = new MemoryStream(target.ToArray()); using (ZipFile z = new ZipFile(archive)) { Assert.AreEqual(1, z.Count); Assert.IsTrue(z[0].IsUnicodeText); } } finally { File.Delete(addFile); } }
public void Defaults() { DateTime testStart=DateTime.Now; ZipEntryFactory f=new ZipEntryFactory(); Assert.IsNotNull(f.NameTransform); Assert.AreEqual(-1, f.GetAttributes); Assert.AreEqual(0, f.SetAttributes); Assert.AreEqual(ZipEntryFactory.TimeSetting.LastWriteTime, f.Setting); Assert.LessOrEqual(testStart, f.FixedDateTime); Assert.GreaterOrEqual(DateTime.Now, f.FixedDateTime); f=new ZipEntryFactory(ZipEntryFactory.TimeSetting.LastAccessTimeUtc); Assert.IsNotNull(f.NameTransform); Assert.AreEqual(-1, f.GetAttributes); Assert.AreEqual(0, f.SetAttributes); Assert.AreEqual(ZipEntryFactory.TimeSetting.LastAccessTimeUtc, f.Setting); Assert.LessOrEqual(testStart, f.FixedDateTime); Assert.GreaterOrEqual(DateTime.Now, f.FixedDateTime); DateTime fixedDate = new DateTime(1999, 1, 2); f=new ZipEntryFactory(fixedDate); Assert.IsNotNull(f.NameTransform); Assert.AreEqual(-1, f.GetAttributes); Assert.AreEqual(0, f.SetAttributes); Assert.AreEqual(ZipEntryFactory.TimeSetting.Fixed, f.Setting); Assert.AreEqual(fixedDate, f.FixedDateTime); }
public void CreateInMemoryValues() { string tempFile = "bingo:"; // Note the seconds returned will be even! DateTime epochTime = new DateTime(1980, 1, 1); DateTime createTime = new DateTime(2100, 2, 27, 11, 07, 56); DateTime lastWriteTime = new DateTime(2050, 11, 3, 7, 23, 32); DateTime lastAccessTime = new DateTime(2050, 11, 3, 0, 42, 12); ZipEntryFactory factory = new ZipEntryFactory(); ZipEntry entry; int combinedAttributes; DateTime startTime = DateTime.Now; factory.Setting = ZipEntryFactory.TimeSetting.CreateTime; factory.GetAttributes = ~((int)FileAttributes.ReadOnly); factory.SetAttributes = (int)FileAttributes.ReadOnly; combinedAttributes = (int)FileAttributes.ReadOnly; entry = factory.MakeFileEntry(tempFile, false ); Assert.IsTrue(TestHelper.CompareDosDateTimes(startTime, entry.DateTime) <= 0, "Create time failure"); Assert.AreEqual(entry.ExternalFileAttributes, combinedAttributes); Assert.AreEqual(-1, entry.Size); factory.FixedDateTime = startTime; factory.Setting = ZipEntryFactory.TimeSetting.Fixed; entry = factory.MakeFileEntry(tempFile, false); Assert.AreEqual(0, TestHelper.CompareDosDateTimes(startTime, entry.DateTime), "Access time failure"); Assert.AreEqual(-1, entry.Size); factory.Setting = ZipEntryFactory.TimeSetting.LastWriteTime; entry = factory.MakeFileEntry(tempFile, false); Assert.IsTrue(TestHelper.CompareDosDateTimes(startTime, entry.DateTime) <= 0, "Write time failure"); Assert.AreEqual(-1, entry.Size); }
public void CreatedValues() { string tempDir=GetTempFilePath(); Assert.IsNotNull(tempDir, "No permission to execute this test?"); tempDir=Path.Combine(tempDir, "SharpZipTest"); if( tempDir!=null ) { Directory.CreateDirectory(tempDir); try { // Note the seconds returned will be even! DateTime createTime=new DateTime(2100, 2, 27, 11, 07, 56); DateTime lastWriteTime=new DateTime(2050, 11, 3, 7, 23, 32); DateTime lastAccessTime=new DateTime(2050, 11, 3, 0, 42, 12); string tempFile=Path.Combine(tempDir, "SharpZipTest.Zip"); using( FileStream f=File.Create(tempFile, 1024) ) { f.WriteByte(0); } File.SetCreationTime(tempFile, createTime); File.SetLastWriteTime(tempFile, lastWriteTime); File.SetLastAccessTime(tempFile, lastAccessTime); FileAttributes attributes=FileAttributes.Hidden; File.SetAttributes(tempFile, attributes); ZipEntryFactory factory=null; ZipEntry entry; int combinedAttributes=0; try { factory=new ZipEntryFactory(); factory.Setting=ZipEntryFactory.TimeSetting.CreateTime; factory.GetAttributes=~((int)FileAttributes.ReadOnly); factory.SetAttributes=(int)FileAttributes.ReadOnly; combinedAttributes=(int)(FileAttributes.ReadOnly|FileAttributes.Hidden); entry=factory.MakeFileEntry(tempFile); Assert.AreEqual(createTime, entry.DateTime, "Create time failure"); Assert.AreEqual(entry.ExternalFileAttributes, combinedAttributes); Assert.AreEqual(1, entry.Size); factory.Setting=ZipEntryFactory.TimeSetting.LastAccessTime; entry=factory.MakeFileEntry(tempFile); Assert.AreEqual(lastAccessTime, entry.DateTime, "Access time failure"); Assert.AreEqual(1, entry.Size); factory.Setting=ZipEntryFactory.TimeSetting.LastWriteTime; entry=factory.MakeFileEntry(tempFile); Assert.AreEqual(lastWriteTime, entry.DateTime, "Write time failure"); Assert.AreEqual(1, entry.Size); } finally { File.Delete(tempFile); } // Do the same for directories // Note the seconds returned will be even! createTime=new DateTime(2090, 2, 27, 11, 7, 56); lastWriteTime=new DateTime(2107, 12, 31, 23, 59, 58); lastAccessTime=new DateTime(1980, 1, 1, 1, 0, 0); Directory.SetCreationTime(tempDir, createTime); Directory.SetLastWriteTime(tempDir, lastWriteTime); Directory.SetLastAccessTime(tempDir, lastAccessTime); factory.Setting=ZipEntryFactory.TimeSetting.CreateTime; entry=factory.MakeDirectoryEntry(tempDir); Assert.AreEqual(createTime, entry.DateTime, "Directory create time failure"); Assert.IsTrue((entry.ExternalFileAttributes&(int)FileAttributes.Directory)==(int)FileAttributes.Directory); factory.Setting=ZipEntryFactory.TimeSetting.LastAccessTime; entry=factory.MakeDirectoryEntry(tempDir); Assert.AreEqual(lastAccessTime, entry.DateTime, "Directory access time failure"); factory.Setting=ZipEntryFactory.TimeSetting.LastWriteTime; entry=factory.MakeDirectoryEntry(tempDir); Assert.AreEqual(lastWriteTime, entry.DateTime, "Directory write time failure"); } finally { Directory.Delete(tempDir, true); } } }
public scanDirParams(ZipOutputStream zip, string sourceDirectory, ZipEntryFactory entryFactory, ProgressHandler progress, IStringFilter nf, IStringFilter df) { Zip = zip; EntryFactory = entryFactory; Progress = progress; NameFilter = nf; DirFilter = df; DirEntries = new Dictionary<string, ZipFSEntry>(StringComparer.InvariantCultureIgnoreCase); SourceDirectory = Utils.BackslashAdd(new DirectoryInfo(sourceDirectory).FullName); Buffer = new byte[16384]; }
private object createZip(Stream fileStream, string sourceDirectory, IStringFilter nf, IStringFilter df) { ZipEntryFactory entryFactory; switch (ZipTime) { default: case ZipTime.Now: entryFactory = new ZipEntryFactory(DateTime.Now); break; case ZipTime.UtcNow: entryFactory = new ZipEntryFactory(DateTime.UtcNow); break; case ZipTime.FileTime: entryFactory = new ZipEntryFactory(ZipEntryFactory.TimeSetting.LastWriteTime); break; case ZipTime.UtcFileTime: entryFactory = new ZipEntryFactory(ZipEntryFactory.TimeSetting.LastWriteTimeUtc); break; } entryFactory.NameTransform = new ZipNameTransform(sourceDirectory); entryFactory.IsUnicodeText = Unicode; ProgressHandler progress = delegate(object x, ProgressEventArgs y) { Context.OnProgress(1, y.Name); }; using (ZipOutputStream zip = new ZipOutputStream(fileStream)) { if (Comment!=null) zip.SetComment(Context.TransformStr(Password, Transform)); if (Password != null) zip.Password = Context.TransformStr(Password, Transform); zip.SetLevel(Level); return scanDir(sourceDirectory, new scanDirParams(zip, sourceDirectory, entryFactory, progress, nf, df)); } }