123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using System;
- using System.IO;
- using System.IO.Compression;
- using System.Text;
- namespace HNWD.Pregrant.Common
- {
- public class GZipCompress
- {
- /// <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);
- }
- }
- }
- }
- }
- }
|