c#压缩和解压缩文件

首先,在 http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx 下载源码,找到“ZipConstants.cs”修改

publicstaticstringConvertToString(byte[] data)
{
returnEncoding.GetEncoding("gb2312").GetString(data, 0, data.Length);
//return Encoding.ASCII.GetString(data,0, data.Length);
}

publicstaticbyte[] ConvertToArray(stringstr)
{
returnEncoding.GetEncoding("gb2312").GetBytes(str);
//return Encoding.ASCII.GetBytes(str);
}

如此就可支持中文名称了
以下是我写的压缩与解压缩的代码:

usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
usingICSharpCode.SharpZipLib.Zip;

namespace OA
{
/// <summary>
///WebForm1 的摘要说明。
/// </summary>
publicclass WebForm1 : System.Web.UI.Page
{
publicstringServerDir;
privatevoidPage_Load(objectsender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.ServerDir = Page.MapPath(".");
this.ZipFile("01.txt*02.txt*000.zip");//只是示例,具体的大家自己去实现
this.ZipFile("01.txt*02.txt*001.zip");
this.UnZipFile("000.zip*001.zip");
}


publicstringShortDir(strings)
{
//将文件的绝对路径转为相对路径
stringd=s.Replace(ServerDir,"");
returnd;
}



//压缩文件 p 为客户端传回来的文件列表:文件名+压缩包的名称
publicvoidZipFile(stringp)
{
string[] tmp = p.Split(newchar[]{'*'});//分离文件列表
if(tmp[tmp.Length-1]!="")//压缩包名称不为空
{
ZipOutputStream u =newZipOutputStream(File.Create(ServerDir+tmp[tmp.Length-1]));//新建压缩文件流 “ZipOutputStream”
for(inti =0;i<tmp.Length-1;i++)
{
if(tmp[i]!="")//分离出来的文件名不为空
{
this.AddZipEntry(tmp[i],u,outu);//向压缩文件流加入内容
}
}
u.Finish();// 结束压缩
u.Close();
}
}

//添加压缩项目:p 为需压缩的文件或文件夹; u 为现有的源ZipOutputStream;outj为已添加“ZipEntry”的“ZipOutputStream”
publicvoidAddZipEntry(stringp,ZipOutputStream u,outZipOutputStream j)
{
strings =ServerDir+p;

if(Directory.Exists(s))//文件夹的处理
{
DirectoryInfo di =newDirectoryInfo(s);

//***********以下内容是修订后添加的***********

if(di.GetDirectories().Length<=0)//没有子目录
{
ZipEntry z =newZipEntry(p+"""");//末尾“""”用于文件夹的标记
u.PutNextEntry(z);
}

//***************以上内容是修订后添加的***************


foreach(DirectoryInfo temindi.GetDirectories())//获取子目录
{
ZipEntry z =newZipEntry(this.ShortDir(tem.FullName)+"""");//末尾“""”用于文件夹的标记
u.PutNextEntry(z);//此句不可少,否则空目录不会被添加
s =this.ShortDir(tem.FullName);
this.AddZipEntry(s,u,outu);//递归
}
foreach(FileInfo tempindi.GetFiles())//获取此目录的文件
{
s =this.ShortDir(temp.FullName);
this.AddZipEntry(s,u,outu); //递归
}
}
elseif(File.Exists(s))//文件的处理
{
u.SetLevel(9);//压缩等级
FileStream f = File.OpenRead(s);
byte[] b =newbyte[f.Length];
f.Read(b,0,b.Length); //将文件流加入缓冲字节中
ZipEntry z =newZipEntry(this.ShortDir(s));
u.PutNextEntry(z); //为压缩文件流提供一个容器
u.Write(b,0,b.Length);//写入字节
f.Close();
}
j=u;//返回已添加数据的“ZipOutputStream”
}


publicvoidUnZipFile(stringp)//解压缩
{
string[] un_tmp = p.Split(newchar[]{'*'});
inti2=0;//防止名称冲突的参数
for(intj=0;j<un_tmp.Length;j++)
{
if(un_tmp[j]!="")
{
stringun_time=System.DateTime.Now.ToShortDateString()+"-"+System.DateTime.Now.Hour.ToString()+"-"+System.DateTime.Now.Minute.ToString()+"-"+(System.DateTime.Now.Second+i2).ToString();
stringun_dir =ServerDir+"Unzip-"+un_time;
Directory.CreateDirectory(un_dir); //创建以解压时间为名称的文件夹
ZipInputStream f =newZipInputStream(File.OpenRead(ServerDir+un_tmp[j]));//读取压缩文件,并用此文件流新建 “ZipInputStream”对象

A: ZipEntry zp = f.GetNextEntry(); //获取解压文件流中的项目。 另注(我的理解):在压缩包里每个文件都以“ZipEntry”形式存在,其中包括存放文件的目录信息。如果空目录被压缩,该目录下将出现一个名称为空、大小为 0 、“Crc”属性为 00000000 的“文件”。此文件只是个标记,不会被解压。

while(zp!=null)
{
stringun_tmp2;
if(zp.Name.IndexOf("
""")>=0)//获取文件的目录信息
{
inttmp1 = zp.Name.LastIndexOf("""");
un_tmp2 = zp.Name.Substring(0,tmp1);
Directory.CreateDirectory(un_dir+"
"""+un_tmp2+"""");//必须先创建目录,否则解压失败 --- (A) 关系到下面的步骤(B)
}
if(!zp.IsDirectory&&zp.Crc!=00000000L)//此“ZipEntry”不是“标记文件”
{
inti =2048;
byte[] b =newbyte[i];//每次缓冲 2048 字节
FileStream s= File.Create(un_dir+"
"""+zp.Name);//(B)-新建文件流
while(true)//持续读取字节,直到一个“ZipEntry”字节读完
{
i = f.Read(b,0,b.Length);//读取“ZipEntry”中的字节
if(i>0)
{
s.Write(b,0,i);//将字节写入新建的文件流
}
else
{
break;//读取的字节为 0 ,跳出循环
}
}
s.Close();
}
gotoA;//进入下一个“ZipEntry”
}
f.Close();
i2++;
}
}
}
}
}

C#实现批量压缩和解压缩文件 (附完整源码) 阅读详情

相关推荐

C#里怎么样实现调用7z来快速地压缩文件和解压文件?

根据代码,SevenZip 类封装了对 7-Zip 命令行工具的基本操作,包括压缩多个文件、压缩目录、解压文件以及无目录结构解压文件。• DecompressNoDir: 解压指定的 7z 文件到目标目录,但不保留原目录结构,即所有文件直接解压到目标目录下。又或者想把文件保存在数据库里,这时需要把文件压缩一下,再保存到数据库,这样就可以减少数据库占用的空间。由于7z是开源的软件,又是表现得非常优秀,采用它来压缩的文件会比较小,速度也比较快。在处理数据时,经常会遇到文件占用磁盘空间比较大的问题,

大坡3D软件开发 562

C#实现压缩与解压缩方案

C#实现压缩与解压的方案有很多,比如以下几种: 1.Ionic.Zip (第三方太老、不支持内存压缩)(网上有使用例子:https://www.cnblogs.com/chenghu/p/4607866.html) 2.SharpZipLib和DotNetZip(第三方) 3. ZipArchive 和 ZipFile(.NET 4.5 System.IO.Compression命名空间中新提供的压缩类)(以下是该方案的实现例子) 在 4.5 之前,处理压缩文件,我们经常需要使用第三方...

carcarrot的博客 8367

深度学习---双层神经网络中矩阵的运算及其含义记录

深度学习---双层神经网络中矩阵的运算及其含义记录神经网络的正向传播与反向传播正向传播第一层的权重矩阵第一层的输入矩阵Z^1^ = W^1^X^1^ + b^1^A^1^ = σ(Z^1^)第二层的权重矩阵第二层的输入矩阵Z^2^ = W^2^A^1^ + b^2^反向传播dz^2^ = A^2^ - Ydw^2^ = 1/n dz^2^A^1T^db^2^ = 1/n np.sum(dz^2...

qq_43228441的博客 3748

C#压缩和解压文件

使用C#压缩和解压文件的两种方法,支持创建zip/gz/rar等常见压缩格式

【微软MVP】zhaotianff的专栏 3469

LTspice基础教程-024.参数扫描;step指令用法

step指令用于参数扫描,扫描步骤可以是线性的,对数的或列表。 下面介绍几种常用用法: 绘制一简单电阻分压电路,如下: 线性扫描 语法:.step param <Name> <Start Value> <Stop Value> <Increment> 例:.step param Res 20 100 20 意思是R2的阻值从20变化到100,...

gaoyong_wang的博客 3万+

51单片机IAP技术详解:从原理到实战,实现远程程序自更新

在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl

weixin_29161719的博客 407

C# 文件的压缩与解压缩

C#进行压缩与解压缩

qq_42690327的博客 5408

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

C#压缩或解压(rar和zip文件)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 5

yegshun的博客 3万+

Drugbank XML文件解析

DrugBank Release Version 5.1.13 | DrugBank Online点击download下载XML文件,也可以使用COMMAND命令下载。(下载文件需要先注册一个账号文件,就可以下载了)下载好压缩文件,并解压会得到如下两个文件:full database.xml就是我们所需要的XML文件,完整的XML很大,大约为1.6G因为原始的文件非常大,直接查看XML文件是有困难的,所以我们使用一下命令来查看该文件的前一百行 得到如下输出 对于前三行 第一行:表示XML 版本为 1.0

qtjbzs的博客 586

《AI应用架构师智能特征工程实践的前沿趋势解读》

面对传统方法的局限性,智能特征工程(Intelligent Feature Engineering)应运而生。智能特征工程是指利用人工智能、机器学习和自动化技术,实现特征提取、构造、选择和优化过程的自动化、智能化和可扩展化的方法和技术体系。效率提升:将数据科学家从繁琐的人工特征工程中解放出来,大幅缩短特征开发周期。质量保障:通过系统化方法发现人类难以察觉的特征模式,提高特征质量和模型性能。可扩展性:能够处理大规模、高维度和多类型的数据,适应不同领域和场景。降低门槛。

大数据洞察的博客 1181

c#解压以及压缩

解压压缩工具类 代码如下(示例): using System; using System.IO; using System.Diagnostics; using Microsoft.Win32; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; ///压缩、解压缩类 namespace DotNet.Utilities { public class SharpZip {

qq_43424304的博客 563

NVIDIA GR00T SONIC - 人形机器人强化学习全身控制入门教程(一)

SONIC 是一个类人行为基础模型,它为机器人提供了一套从大规模人类动作数据中学习而来的核心运动技能。与为每个动作单独构建控制器不同,SONIC 将动作追踪作为可扩展的训练任务,因此单一套统一策略即可产生自然的全身运动,并支持多种多样的行为。         🎯 主要特点: 🚶 自然的全身运动(行走、爬行、动态动作) 🎮 支持实时 VR 遥操作 🤖 高级规划与交互的基础 📦 即用型 C++ 推理栈

2506_90492529的博客 844

C#使用#ziplib压缩和解压缩文件

要下载整个目录,一般方法是一个个文件下载或ftp工具 现在用SharpZipLib就能实现实时zip压缩下载整个目录 SharpZipLib提供了多种压缩算法的支持,纯csharp代码,参见 http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp 原理是通过递归方法将每个文件压缩到ZipOutputStream,然

白开水的专栏 899

Ardupilot chibios IO固件,IO与FMU通信,固件下载(3)

目录 文章目录目录摘要 摘要 本节主要记录自己学习IO与FMU通信

陌城烟雨 2801

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C#使用System.IO.Compression.GZipStream压缩和解压缩文件

新建类GZipStreamUtil,源程序如下: using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SiemensPlcDemo { /// <summary> /// 压缩与解压缩操

ylq1045的专栏 2479

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c#使用SharpZipLib压缩和解压缩文件

本文是在其他人基础上修改而来,测试过程: 正常zip方式压缩文件,然后用wrar工具可以解压出来(开始用wrar3.4版本的怎么也解不出来,以为是不支持wrar解压,后来改用3.9及4.11版本可以实现正常解压,搞了半天时间,原来是版本问题,版本不对害死人啊),另外wrar压缩时选择“zip”选项压缩时,再用此类进行解压,也可以正常解压。 在此以做标记,给自己个别人做铺路,以后少走弯路, 如

guobing965816的专栏 1374

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# 压缩和解压缩文件

文件和流进行压缩或解压缩。下面的示例演示使用压缩文件可以执行的某些操作。

lvmingzhou的专栏 1180

c# 解压zip 进度_基于SharpZipLib实现带进度条压缩和解压缩文件

一、运行效果二、实现过程①、文件/目录选择选择zip保存文件SaveFileDialogsaveFile=newSaveFileDialog();saveFile.Filter="zipfiles(*.zip)|*.zip";if(saveFile.ShowDialog()==DialogResult.OK){txtSaveZipFileName.Text=saveFile...

weixin_35638013的博客 1461

C# 利用ICSharpCode.SharpZipLib.dll 实现压缩和解压缩文件

我们 开发时经常会遇到需要压缩文件的需求,利用C#的开源组件ICSharpCode.SharpZipLib,就可以很容易的实现压缩和解压缩功能. 压缩文件:  /// &lt;summary&gt;          /// 压缩指定文件生成ZIP文件          /// &lt;/summary&gt;          /// &lt;param name="topDirName"&gt...

xqaizx的专栏 3225

C#使用#ziplib压缩和解压缩文件(2)

#region 加压解压方法 ///         /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)         ///         /// 被压缩的文件夹夹路径         /// 生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip         /// 出错信息        

白开水的专栏 683

C#学习笔记之压缩文件和解压文件

DotnetZip是一个开源类库,支持.NET的任何语言,可很方便的创建,读取,和更新压缩文件。而且还可以使用在.NETCompact Framework中。  下载地址在这里:http://dotnetzip.codeplex.com/ 下载到的包里有很多个dll文件,一般引用 Ionic.Zip.dll 就可以: 然后引用这个命名空间: using Ionic.Zip;

秋忆夏伤的博客 487
上一篇: MapXtreme加载瓦片地图
下一篇: C# 连接池
devgis
博客等级 码龄16年 52粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值