using System; using System.IO; using System.IO.Compression; using System.Text; namespace HNWD.Pregrant.Common { public class GZipCompress { /// /// 压缩字节数组 /// /// 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(); } } } /// /// 解压缩字节数组 /// /// 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(); } } } } /// /// 压缩字符串 /// /// /// public static string Compress(string input) { byte[] inputBytes = Encoding.Default.GetBytes(input); byte[] result = Compress(inputBytes); return Convert.ToBase64String(result); } /// /// 解压缩字符串 /// /// /// public static string Decompress(string input) { byte[] inputBytes = Convert.FromBase64String(input); byte[] depressBytes = Decompress(inputBytes); return Encoding.Default.GetString(depressBytes); } /// /// 压缩目录 /// /// public static void Compress(DirectoryInfo dir) { foreach (FileInfo fileToCompress in dir.GetFiles()) { Compress(fileToCompress); } } /// /// 解压缩目录 /// /// public static void Decompress(DirectoryInfo dir) { foreach (FileInfo fileToCompress in dir.GetFiles()) { Decompress(fileToCompress); } } /// /// 压缩文件 /// /// 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); } } } } } /// /// 解压缩文件 /// /// 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); } } } } } }