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();
    }
    }
    }
    }

    两个文件都需要同时存在

  • 相关阅读:
    hdu 携程全球数据中心建设 (球面距离 + 最小生成树)
    next_permutation()函数 和 prev_permutation() 按字典序求全排列
    poj 3792 Area of Polycubes (简单模拟)
    poj 3790 Recursively Palindromic Partitions (递推)
    hdu 1575 Tr A (矩阵快速幂入门题)
    hdu 2986 Ballot evaluation (模拟)
    sscanf() 和 sprintf()的用法。
    Codeforces Round #239 (Div. 2)
    hdu 2372 El Dorado (dp)
    hdu 3433 A Task Process(dp+二分)
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/5248054.html
Copyright © 2011-2022 走看看