Пример #1
0
	/// <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();
	}