/// <summary> /// Creates the zip file. /// </summary> /// <returns><c>true</c>, if zip file was created, <c>false</c> otherwise.</returns> /// <param name="szInputPath">Size input path.</param> /// <param name="szOutPath">Size out path.</param> public static void CreateZipFile(string szInputDirectory, string szOutPath, string pat, SearchFileType type) { if (File.Exists(szOutPath)) File.Delete(szOutPath); szInputDirectory = szInputDirectory.Replace('\\', '/'); int iStart = szInputDirectory.LastIndexOf('/'); FileStream zipFileStream = File.Open(szOutPath, FileMode.OpenOrCreate); if (zipFileStream.CanWrite) { using(ZipOutputStream stream = new ZipOutputStream(zipFileStream)) { // 0 - store only to 9 - means best compression stream.SetLevel(9); string[] aryFilePath = Directory.GetFiles(szInputDirectory, string.Format("{0}.{1}", pat, type.ToString()), SearchOption.AllDirectories); for(int i=0; i<aryFilePath.Length; i++) { if (!Filter(aryFilePath[i])) { string path = aryFilePath[i].Replace('\\', '/'); string zipEntryName = path.Substring(iStart + 1, path.Length - iStart - 1); ZipEntry entry = new ZipEntry(zipEntryName); stream.PutNextEntry(entry); EditorUtility.DisplayCancelableProgressBar(zipEntryName, zipEntryName, (float) i / (float)(aryFilePath.Length - 1)); using(FileStream fs = File.OpenRead(path)) { byte[] byData = new byte[fs.Length]; int nReadLength = fs.Read(byData, 0, byData.Length); if (nReadLength == fs.Length) { stream.Write(byData, 0, byData.Length); } fs.Close(); } } } stream.Close(); } zipFileStream.Close(); } EditorUtility.ClearProgressBar(); }