53 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
| using System;
 | |
| using System.IO;
 | |
| 
 | |
| using ICSharpCode.SharpZipLib.Checksum;
 | |
| using ICSharpCode.SharpZipLib.Zip;
 | |
| 
 | |
| namespace IRaCIS.Core.Infrastructure
 | |
| {
 | |
|     public  class ZipHelper
 | |
|     {
 | |
|         public static void CreateZip(string sourceFilePath, string destinationZipFilePath)
 | |
|         {
 | |
|             if (sourceFilePath[sourceFilePath.Length - 1] != Path.DirectorySeparatorChar)
 | |
|                 sourceFilePath += Path.DirectorySeparatorChar;
 | |
|          
 | |
|                 ZipOutputStream zipStream = new ZipOutputStream(File.Create(destinationZipFilePath));
 | |
|                 zipStream.SetLevel(6);  // 压缩级别 0-9
 | |
|                 CreateZipFiles(sourceFilePath, zipStream);
 | |
|                 zipStream.Finish();
 | |
|                 zipStream.Close();           
 | |
|         }
 | |
|        
 | |
|         private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream)
 | |
|         {
 | |
|             Crc32 crc = new Crc32();
 | |
|             string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
 | |
|             foreach (string file in filesArray)
 | |
|             {
 | |
|                 if (Directory.Exists(file))                     //如果当前是文件夹,递归
 | |
|                 {
 | |
|                     CreateZipFiles(file, zipStream);
 | |
|                 }
 | |
|                 else                                            //如果是文件,开始压缩
 | |
|                 {
 | |
|                     FileStream fileStream = File.OpenRead(file);
 | |
|                     byte[] buffer = new byte[fileStream.Length];
 | |
|                     fileStream.Read(buffer, 0, buffer.Length);
 | |
|                     string tempFile = file.Substring(sourceFilePath.LastIndexOf("\\") + 1);
 | |
|                     ZipEntry entry = new ZipEntry(tempFile);
 | |
|                     entry.DateTime = DateTime.Now;
 | |
|                     entry.Size = fileStream.Length;
 | |
|                     fileStream.Close();
 | |
|                     crc.Reset();
 | |
|                     crc.Update(buffer);
 | |
|                     entry.Crc = crc.Value;
 | |
|                     zipStream.PutNextEntry(entry);
 | |
|                     zipStream.Write(buffer, 0, buffer.Length);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |