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

    两个文件都需要同时存在

  • 相关阅读:
    java -jar 远程调试
    正则
    python2和3的区别
    javaw 运行jar 指定编码
    windows kill 结束指定端口进程
    linux 查看nginx 安装目录
    node-mysql中防止SQL注入
    实用资源库和工具,极大缩减开发时间
    浏览器地址栏运行JavaScript代码
    css垂直居中方案
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/5248054.html
Copyright © 2011-2022 走看看