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

    两个文件都需要同时存在

  • 相关阅读:
    最近遇到了这个坑,特意记录下
    《java8实战阅读笔记》
    Namespace的简讲
    发展历程C++及C++与C语言的关系
    进程间通信的概述2
    本来调试无误的程序在真机运行时报标题错误解决方案
    navagationController 的子控制器如何取消右滑返回
    iOS常见的设计模式
    代码:Masonry 第三方框架
    Autolayout的在storyboard警告和错误
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/5248054.html
Copyright © 2011-2022 走看看