zipHelper zip = new zipHelper();
zip.ZipFile(DatFileNameAll, TempFileNameAll);
log.WriteLog("compression Success");
public class zipHelper
{
/// <summary>
/// 压缩字节数组
/// </summary>
/// <param name="str"></param>
public static byte[] Compress(byte[] inputBytes)
{
using (MemoryStream outStream = new MemoryStream())
{
using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
{
zipStream.Write(inputBytes, 0, inputBytes.Length);
zipStream.Close(); //很重要,必须关闭,否则无法正确解压
return outStream.ToArray();
}
}
}
/// <summary>
/// 解压缩字节数组
/// </summary>
/// <param name="str"></param>
public static byte[] Decompress(byte[] inputBytes)
{
using (MemoryStream inputStream = new MemoryStream(inputBytes))
{
using (MemoryStream outStream = new MemoryStream())
{
using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
{
// zipStream.CopyTo(outStream);
zipStream.Close();
return outStream.ToArray();
}
}
}
}
/// <summary>
/// 压缩字符串
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Compress(string input)
{
byte[] inputBytes = Encoding.Default.GetBytes(input);
byte[] result = Compress(inputBytes);
return Convert.ToBase64String(result);
}
/// <summary>
/// 解压缩字符串
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Decompress(string input)
{
byte[] inputBytes = Convert.FromBase64String(input);
byte[] depressBytes = Decompress(inputBytes);
return Encoding.Default.GetString(depressBytes);
}
/// <summary>
/// 压缩目录
/// </summary>
/// <param name="dir"></param>
public static void Compress(DirectoryInfo dir)
{
foreach (FileInfo fileToCompress in dir.GetFiles())
{
Compress(fileToCompress);
}
}
/// <summary>
/// 解压缩目录
/// </summary>
/// <param name="dir"></param>
public static void Decompress(DirectoryInfo dir)
{
foreach (FileInfo fileToCompress in dir.GetFiles())
{
Decompress(fileToCompress);
}
}
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="fileToCompress"></param>
public static void Compress(FileInfo fileToCompress)
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
// originalFileStream.CopyTo(compressionStream);
}
}
}
}
}
/// <summary>
/// 解压缩文件
/// </summary>
/// <param name="fileToDecompress"></param>
public static void Decompress(FileInfo fileToDecompress)
{
using (FileStream originalFileStream = fileToDecompress.OpenRead())
{
string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))
{
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
{
// decompressionStream.CopyTo(decompressedFileStream);
}
}
}
}
/// <summary>
/// </summary>
/// <param name="sourceFileAllpath">需要压缩的文件(绝对路径)</param>
/// <param name="FileNameByzip">压缩后的文件名称(文件名,默认 同源文件同名)</param>
/// <param name="CompressionLevel">压缩等级(0 无 - 9 最高,默认 5)</param>
/// <param name="BlockSize">缓存大小(每次写入文件大小,默认 2048)</param>
/// <param name="IsEncrypt">是否加密(默认 加密)</param>
public void ZipFile(string fileNameAllpathByzip,List<string> sourceFileAllpathList, Boolean IsdeleteSouceFile = false, int CompressionLevel = 5, int BlockSize = 2048, bool IsEncrypt = false)
{
using (System.IO.FileStream ZipFile = System.IO.File.Create(fileNameAllpathByzip))
{
using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))
{
foreach (string sourceFileAllpath in sourceFileAllpathList)
{
using (System.IO.FileStream SourceFileStream = new System.IO.FileStream(sourceFileAllpath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
string SourcefileName = sourceFileAllpath.Substring(sourceFileAllpath.LastIndexOf("\\") + 1);
ZipEntry ZipEntry = new ZipEntry(SourcefileName);
if (IsEncrypt)
{
ZipStream.Password = "123"; //压缩文件加密
}
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel); //设置压缩级别
byte[] buffer = new byte[BlockSize]; //缓存大小
int sizeRead = 0;
do
{
sizeRead = SourceFileStream.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, sizeRead);
}
while (sizeRead > 0);
SourceFileStream.Close();
}
}
ZipStream.Finish();
ZipStream.Close();
}
ZipFile.Close();
}
}
/// <summary>
/// </summary>
/// <param name="sourceFileAllpath">需要压缩的文件(绝对路径)</param>
/// <param name="FileNameByzip">压缩后的文件名称(文件名,默认 同源文件同名)</param>
/// <param name="CompressionLevel">压缩等级(0 无 - 9 最高,默认 5)</param>
/// <param name="BlockSize">缓存大小(每次写入文件大小,默认 2048)</param>
/// <param name="IsEncrypt">是否加密(默认不加密)</param>
public void ZipFile(string sourceFileAllpath, string FileNameAllpathByzip, int CompressionLevel = 5, int BlockSize = 2048, bool IsEncrypt = false)
{
using (System.IO.FileStream ZipFile = System.IO.File.Create(FileNameAllpathByzip))
{
using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))
{
using (System.IO.FileStream SourceFileStream = new System.IO.FileStream(sourceFileAllpath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
string SourcefileName = sourceFileAllpath.Substring(sourceFileAllpath.LastIndexOf("\\") + 1);
ZipEntry ZipEntry = new ZipEntry(SourcefileName);
if (IsEncrypt)
{
ZipStream.Password = "123"; //压缩文件加密
}
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);//设置压缩级别
byte[] buffer = new byte[BlockSize];//缓存大小
int sizeRead = 0;
try
{
do
{
sizeRead = SourceFileStream.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, sizeRead);
}
while (sizeRead > 0);
}
catch (Exception ex)
{
throw ex;
}
SourceFileStream.Close();
}
ZipStream.Finish();
ZipStream.Close();
}
ZipFile.Close();
}
}
}