zoukankan      html  css  js  c++  java
  • web在线压缩和解压文件

    /// <summary>
    /// 压缩文件
    /// </summary>
    /// <param name="sourceFile">要操作的文件</param>
    /// <param name="destinationFile">操作后的文件</param>
    public void CompressFile(string sourceFile, string destinationFile)
    {
    if (!File.Exists(sourceFile)) throw new FileNotFoundException();
    using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
    {
    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">要操作的文件</param>
    /// <param name="destinationFile">操作后的文件</param>
    public 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();
    }
    }
    }
    }

    两个文件都需要同时存在

  • 相关阅读:
    POJ_1066_Treasure Hunt_判断线段相交
    【转载】VS写汇编程序01:VS2015配置汇编语言开发环境
    【转载】汇编调试程序Debug使用
    【转载】C++ STL快速入门
    Longest Palindromic Substring
    Leetcode经典试题:Longest Substring Without Repeating Characters解析
    C++数组的初始化
    C++题目:回文数判断
    C++-int类型整数超出范围后的处理
    Memorise Me!——用数值做地址,实现快速查找
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/5248054.html
Copyright © 2011-2022 走看看