zoukankan      html  css  js  c++  java
  • 【转载】使用C#2.0进行文件压缩和解压


    using System;
    using System.IO;
    using System.IO.Compression;

    public class Zip
    {
        /// <summary>
        /// 压缩
        /// </summary>
        /// <param name="sourceFile">源文件名,如a.txt</param>
        /// <param name="destinationFile">目标文件名,如a.rar</param>
          public static void CompressFile(string sourceFile, string destinationFile)
          {
            if (!File.Exists(sourceFile)) throw new FileNotFoundException();
          using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read))
          {
            byte [] buffer = new byte[sourceStream.Length];
            int checkCounter = sourceStream.Read(buffer, 0, buffer.Length);
            if (checkCounter != buffer.Length) throw new ApplicationException();
              using (FileStream destinationStream = new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write))
              {
                using (GZipStream compressedStream = new GZipStream(destinationStream, CompressionMode.Compress, true))
                {
                  compressedStream.Write(buffer, 0, buffer.Length);
                }
              }
            }
          }
        
        /// <summary>
        /// 解压缩
        /// </summary>
        /// <param name="sourceFile">源文件名,如a.rar</param>
        /// <param name="destinationFile">目标文件名,如a.txt</param>
        public static void DecompressFile(string sourceFile, string destinationFile)
          {
            if (!File.Exists( sourceFile)) throw new FileNotFoundException();
          using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open))
            {
            byte [] quartetBuffer = new byte[4];
            int position = (int)sourceStream.Length - 4;
            sourceStream.Position = position;
            sourceStream.Read(quartetBuffer, 0, 4);
            sourceStream.Position = 0;
            int checkLength = BitConverter.ToInt32(quartetBuffer, 0);
            byte[] buffer = new byte[checkLength + 100];
              using (GZipStream decompressedStream = new GZipStream(sourceStream, CompressionMode.Decompress, true))
              {
                int total = 0;
              for (int offset = 0; ; )
              {
                int bytesRead = decompressedStream.Read(buffer, offset, 100);
                if (bytesRead == 0) break;
                offset += bytesRead;
                total += bytesRead;
              }
                  using (FileStream destinationStream = new FileStream(destinationFile, FileMode.Create))
                  {
                    destinationStream.Write(buffer, 0, total);
                    destinationStream.Flush();
                  }
            }
          }
        }
    }

  • 相关阅读:
    【算法】273-每周一练 之 数据结构与算法(Tree)
    【算法】272-每周一练 之 数据结构与算法(Dictionary 和 HashTable)
    【CSS】271- RGB、HSL、Hex网页色彩,看完这篇全懂了
    【Redis】270- 你需要知道的那些 redis 数据结构
    Hybird App 应用开发中5个必备知识点复习
    【Vuejs】269- 提升90%加载速度——vuecli下的首屏性能优化
    【富文本】268- 富文本原理了解一下?
    HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (二)
    HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (一)
    HTML5 CSS3 专题 : 拖放 (Drag and Drop)
  • 原文地址:https://www.cnblogs.com/googlegis/p/2978763.html
Copyright © 2011-2022 走看看