GZipCompress.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.IO;
  3. using System.IO.Compression;
  4. using System.Text;
  5. namespace HNWD.Pregrant.Common
  6. {
  7. public class GZipCompress
  8. {
  9. /// <summary>
  10. /// 压缩字节数组
  11. /// </summary>
  12. /// <param name="str"></param>
  13. public static byte[] Compress(byte[] inputBytes)
  14. {
  15. using (MemoryStream outStream = new MemoryStream())
  16. {
  17. using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
  18. {
  19. zipStream.Write(inputBytes, 0, inputBytes.Length);
  20. zipStream.Close(); //很重要,必须关闭,否则无法正确解压
  21. return outStream.ToArray();
  22. }
  23. }
  24. }
  25. /// <summary>
  26. /// 解压缩字节数组
  27. /// </summary>
  28. /// <param name="str"></param>
  29. public static byte[] Decompress(byte[] inputBytes)
  30. {
  31. using (MemoryStream inputStream = new MemoryStream(inputBytes))
  32. {
  33. using (MemoryStream outStream = new MemoryStream())
  34. {
  35. using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
  36. {
  37. zipStream.CopyTo(outStream);
  38. zipStream.Close();
  39. return outStream.ToArray();
  40. }
  41. }
  42. }
  43. }
  44. /// <summary>
  45. /// 压缩字符串
  46. /// </summary>
  47. /// <param name="input"></param>
  48. /// <returns></returns>
  49. public static string Compress(string input)
  50. {
  51. byte[] inputBytes = Encoding.Default.GetBytes(input);
  52. byte[] result = Compress(inputBytes);
  53. return Convert.ToBase64String(result);
  54. }
  55. /// <summary>
  56. /// 解压缩字符串
  57. /// </summary>
  58. /// <param name="input"></param>
  59. /// <returns></returns>
  60. public static string Decompress(string input)
  61. {
  62. byte[] inputBytes = Convert.FromBase64String(input);
  63. byte[] depressBytes = Decompress(inputBytes);
  64. return Encoding.Default.GetString(depressBytes);
  65. }
  66. /// <summary>
  67. /// 压缩目录
  68. /// </summary>
  69. /// <param name="dir"></param>
  70. public static void Compress(DirectoryInfo dir)
  71. {
  72. foreach (FileInfo fileToCompress in dir.GetFiles())
  73. {
  74. Compress(fileToCompress);
  75. }
  76. }
  77. /// <summary>
  78. /// 解压缩目录
  79. /// </summary>
  80. /// <param name="dir"></param>
  81. public static void Decompress(DirectoryInfo dir)
  82. {
  83. foreach (FileInfo fileToCompress in dir.GetFiles())
  84. {
  85. Decompress(fileToCompress);
  86. }
  87. }
  88. /// <summary>
  89. /// 压缩文件
  90. /// </summary>
  91. /// <param name="fileToCompress"></param>
  92. public static void Compress(FileInfo fileToCompress)
  93. {
  94. using (FileStream originalFileStream = fileToCompress.OpenRead())
  95. {
  96. if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
  97. {
  98. using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
  99. {
  100. using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
  101. {
  102. originalFileStream.CopyTo(compressionStream);
  103. }
  104. }
  105. }
  106. }
  107. }
  108. /// <summary>
  109. /// 解压缩文件
  110. /// </summary>
  111. /// <param name="fileToDecompress"></param>
  112. public static void Decompress(FileInfo fileToDecompress)
  113. {
  114. using (FileStream originalFileStream = fileToDecompress.OpenRead())
  115. {
  116. string currentFileName = fileToDecompress.FullName;
  117. string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
  118. using (FileStream decompressedFileStream = File.Create(newFileName))
  119. {
  120. using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
  121. {
  122. decompressionStream.CopyTo(decompressedFileStream);
  123. }
  124. }
  125. }
  126. }
  127. }
  128. }