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

    两个文件都需要同时存在

  • 相关阅读:
    springboot 上传文件过大的500异常
    java OSS批量下载,并压缩为ZIP
    Java 对象转xml (dom 4j)
    windows 10 64位机器上 安装部署
    Java 读取excel 文件流
    关于Java 去除空格,换行的代码
    ORACLE 查询近一天,近半小时内的数据
    【转】C#(ASP.Net)获取当前路径的方法集合
    【转】NumPy-快速处理数据
    【转】Eclipse 常用快捷键 (动画讲解)
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/5248054.html
Copyright © 2011-2022 走看看