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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|