c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容。下面的代码没有把多文件的目录结构加进去

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;namespace Test.Zip
{class CompressHelper{/// <summary>/// 单文件压缩(生成的压缩包和第三方的解压软件兼容)/// </summary>/// <param name="sourceFilePath"></param>/// <returns></returns>public string CompressSingle(string sourceFilePath){string zipFileName = sourceFilePath + ".gz";using (FileStream sourceFileStream = new FileInfo(sourceFilePath).OpenRead()){using (FileStream zipFileStream = File.Create(zipFileName)){using (GZipStream zipStream = new GZipStream(zipFileStream, CompressionMode.Compress)){sourceFileStream.CopyTo(zipStream);}}}return zipFileName;}/// <summary>/// 自定义多文件压缩(生成的压缩包和第三方的压缩文件解压不兼容)/// </summary>/// <param name="sourceFileList">文件列表</param>/// <param name="saveFullPath">压缩包全路径</param>public void CompressMulti(string[] sourceFileList, string saveFullPath){MemoryStream ms = new MemoryStream();foreach (string filePath in sourceFileList){Console.WriteLine(filePath);if (File.Exists(filePath)){string fileName = Path.GetFileName(filePath);byte[] fileNameBytes = System.Text.Encoding.UTF8.GetBytes(fileName);byte[] sizeBytes = BitConverter.GetBytes(fileNameBytes.Length);ms.Write(sizeBytes, 0, sizeBytes.Length);ms.Write(fileNameBytes, 0, fileNameBytes.Length);byte[] fileContentBytes = System.IO.File.ReadAllBytes(filePath);ms.Write(BitConverter.GetBytes(fileContentBytes.Length), 0, 4);ms.Write(fileContentBytes, 0, fileContentBytes.Length);}}ms.Flush();ms.Position = 0;using (FileStream zipFileStream = File.Create(saveFullPath)){using (GZipStream zipStream = new GZipStream(zipFileStream, CompressionMode.Compress)){ms.Position = 0;ms.CopyTo(zipStream);}}ms.Close();}/// <summary>/// 多文件压缩解压/// </summary>/// <param name="zipPath">压缩文件路径</param>/// <param name="targetPath">解压目录</param>public void DeCompressMulti(string zipPath, string targetPath){byte[] fileSize = new byte[4];if (File.Exists(zipPath)){using (FileStream fStream = File.Open(zipPath, FileMode.Open)){using (MemoryStream ms = new MemoryStream()){using (GZipStream zipStream = new GZipStream(fStream, CompressionMode.Decompress)){zipStream.CopyTo(ms);}ms.Position = 0;while (ms.Position != ms.Length){ms.Read(fileSize, 0, fileSize.Length);int fileNameLength = BitConverter.ToInt32(fileSize, 0);byte[] fileNameBytes = new byte[fileNameLength];ms.Read(fileNameBytes, 0, fileNameBytes.Length);string fileName = System.Text.Encoding.UTF8.GetString(fileNameBytes);string fileFulleName = targetPath + fileName;ms.Read(fileSize, 0, 4);int fileContentLength = BitConverter.ToInt32(fileSize, 0);byte[] fileContentBytes = new byte[fileContentLength];ms.Read(fileContentBytes, 0, fileContentBytes.Length);using (FileStream childFileStream = File.Create(fileFulleName)){childFileStream.Write(fileContentBytes, 0, fileContentBytes.Length);}}}}}}}
}

调用示例:

 List<string> strList = new List<string>() { @"D:\文档\soapUI工程\Synchro-soapui-project.xml", @"D:\文档\soapUI工程\PKBSML-soapui-project.xml", @"D:\文档\soapUI工程\PKBSML-soapui-project.xml" };var zipHelper = new Test.Zip.CompressHelper();zipHelper.CompressMulti(strList.ToArray(), @"D:\wulala.gz");zipHelper.DeCompressMulti(@"D:\wulala.gz", @"D:\web\");


转载于:https://www.cnblogs.com/zpyplan/p/9567852.html

c#自带类实现的多文件压缩和解压相关推荐

  1. python调用程序压缩文件_Python实现文件压缩和解压的示例代码

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  2. Linux的zip压缩文件压缩和解压

    Linux的zip压缩文件压缩和解压 <Linux一线运维实战>清华大学出版社(即将出版) 通常,系统中的文件的可以被直接打开的,这就难免文件的内容被查看.另外,对于要归档保存的(压缩)文 ...

  3. android文件压缩库,Android文件压缩和解压

    Android文件压缩和解压 Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io. ...

  4. python解压文件_使用Python实现文件压缩和解压

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  5. c++创建文件_使用Python实现文件压缩和解压

    (点击上方快速关注并设置为星标,一起学Python) 来源:网络 大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Pyt ...

  6. java压缩和解压流,实现文件压缩和解压,代码都有注释

    压缩和解压流 压缩文件: ZipOutputStream 常用方法 方法名 介绍 ZipOutputStream(OutputStream out) 构造方法:创建新的ZIP输出流 public vo ...

  7. C# ZipHelper C#公共类 -- ICSharpCode.SharpZipLib.dll实现压缩和解压

    关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 1.基本介绍 由于项目中需要用到各种压缩将文件 ...

  8. 利用JUZ包实现文件压缩和解压

    压缩解压过程还是用IO流对文件的读写操作 本质还是对API的引用,代码逻辑比较简单,相关注释比较详细,请在代码中查看 代码已跑通,可自行copy测试 注:1. 在压缩文件时,传入的压缩文件路径必须是以 ...

  9. Linux文件压缩和解压命令【gzip、gunzip、zip、unzip、tar】【详细总结】

    解压和压缩 gzip/gunzip gzip 压缩文件 gunzip 解压缩文件 zip/unzip zip 命令语法 命令选项 实例 unzip 语法: 命令选项 实例 tar 语法 实例 例一:将 ...

  10. LINUX学习之文件压缩和解压命令(六)

    gzip/gunzip 命令描述 gzip:压缩文件,将文件压缩为.gz文件 gunzip:解压.gz文件 使用此命令要注意以下几点: 只能压缩文件,不能压缩目录 不保留原先文件 若有多个文件会产生多 ...

最新文章

  1. 完整复现何恺明ICCV获奖论文结果并开源 !(附论文开源代码)
  2. Sql Server实用操作-存储过程精解
  3. python基础补充内容
  4. atlas单机模式代码_生存游戏竞争太大怎么办?在海盗游戏《ATLAS》也可佛系生存...
  5. Delphi XE2 之 FireMonkey 入门(10) - 常用结构 TPoint、TPointF、TSmallPoint、TSize、TRect、TRectF 及相关方法...
  6. P8-07-16 使用 Jenkins 自动构建 Maven 项目
  7. 数字图像与数字图像处理
  8. 枚举类型用法_Mybatis-plus常见用法总结三
  9. Zend Framework学习(3)第一个zend应用
  10. 《REINFORCEMENT LEARNING (DQN) TUTORIAL》的学习笔记
  11. Maven 手动安装JAR包到本地maven仓库后,但在项目中依旧报错找不到JAR包解决方法
  12. c++ -- 重载、重写(覆盖)和隐藏的区别
  13. 常见Web安全漏洞及防范
  14. 看咪蒙真的有那么low吗?
  15. 小米手机自动进入Recovery恢复模式,且不停重启
  16. VirtualBox如何添加ISO文件
  17. Power bi 1.2连接文本文件
  18. 最新蚂蚁金服金融源码+蚂蚁财富投资理财源码/基于FastAdminf框架
  19. 照度计的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 计算机机房标准pdf,计算机机房建设标准要点.pdf

热门文章

  1. spring扩展点六:监听spring容器刷新事件
  2. 7内置数据结构_dict
  3. 慎重!物联网时代情趣用品真的适合联网么?
  4. Firefox for iOS 终于登陆中国
  5. 设计模式之十三:适配器模式(Adapter)
  6. 一个不明觉厉的貌似包含很多linux资料索引的网页
  7. [转] C# mysql 事务回滚
  8. 【转载】C++操作符的优先级
  9. 如何使非域模式下的组策略对管理员帐号无效
  10. 爬楼梯算法-java(递归与非递归)