C#打包文件夹成zip格式(包括文件夹和子文件夹下的所有文件)
之前不喜欢玩博客,这次在博客园也注册了这个博客玩玩。
可是没什么内容,所以想随便添加点什么吧。
最近在微软开发的几个小工具,大多跟文件操作/IO相关,所以准备这两天整理一下,把一些也许可以和大家分享的东西贴出来,希望对于一些C#的初学者有一些帮助吧!
(更多示例代码,可以访问微软学习者帮助网站 Code smaples from microsoft: http://1code.codeplex.com ,下载微软的All-in-onecode framework ,这是我最近在Microsoft要接手负责开发的一个供开发者学习的工具,里面可以搜索到有很多示例代码可供学习者参考。)
C#打包zip文件可以调用现成的第三方dll,事半功倍,而且该dll完全免费,下载地址:SharpZipLib
下载完解压缩后,把 ICSharpCode.SharpZipLib.dll 拷贝到当前项目的目录下(如果偷懒的话,可以直接拷贝到当前项目的bin\Debug目录下),在VS打开的项目引用上右键添加引用 ICSharpCode.SharpZipLib.dll
然后,在VS打开的项目上右键新建一个类,命名为 ZipHelper.cs,把类里面的所有code清空,复制以下代码,粘贴:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Core;namespace ZipOneCode.ZipProvider
{public class ZipHelper{/// <summary>/// 压缩文件/// </summary>/// <param name="sourceFilePath"></param>/// <param name="destinationZipFilePath"></param>public static void CreateZip(string sourceFilePath, string destinationZipFilePath){if (sourceFilePath[sourceFilePath.Length - 1] != System.IO.Path.DirectorySeparatorChar)sourceFilePath += System.IO.Path.DirectorySeparatorChar;ZipOutputStream zipStream = new ZipOutputStream(File.Create(destinationZipFilePath));zipStream.SetLevel(6); // 压缩级别 0-9CreateZipFiles(sourceFilePath, zipStream, sourceFilePath);zipStream.Finish();zipStream.Close();}/// <summary>/// 递归压缩文件/// </summary>/// <param name="sourceFilePath">待压缩的文件或文件夹路径</param>/// <param name="zipStream">打包结果的zip文件路径(类似 D:\WorkSpace\a.zip),全路径包括文件名和.zip扩展名</param>/// <param name="staticFile"></param>private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream, string staticFile){Crc32 crc = new Crc32();string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);foreach (string file in filesArray){if (Directory.Exists(file)) //如果当前是文件夹,递归{CreateZipFiles(file, zipStream, staticFile);}else //如果是文件,开始压缩{FileStream fileStream = File.OpenRead(file);byte[] buffer = new byte[fileStream.Length];fileStream.Read(buffer, 0, buffer.Length);string tempFile = file.Substring(staticFile.LastIndexOf("\\") + 1);ZipEntry entry = new ZipEntry(tempFile);entry.DateTime = DateTime.Now;entry.Size = fileStream.Length;fileStream.Close();crc.Reset();crc.Update(buffer);entry.Crc = crc.Value;zipStream.PutNextEntry(entry);zipStream.Write(buffer, 0, buffer.Length);}}}}
}
使用方法,在外部引用using ZipOneCode.ZipProvider 后,类似调用 ZipHelper.CreateZip(@"D:\Temp\forzip", @"D:\Temp2\forzip.zip") 即可。
注意在调用之前,考虑注意一些异常情况的判断,比如源文件路径是否存在等。
转载于:https://www.cnblogs.com/leco/archive/2010/11/18/1881301.html
C#打包文件夹成zip格式(包括文件夹和子文件夹下的所有文件)相关推荐
- 【转】C#打包文件夹成zip格式(包括文件夹和子文件夹下的所有文件)
C#打包zip文件可以调用现成的第三方dll,事半功倍,而且该dll完全免费,下载地址:SharpZipLib 下载完解压缩后,把 ICSharpCode.SharpZipLib.dll 拷贝到当前 ...
- RAR压缩文件如何转换成ZIP格式?
压缩文件有多种不同的格式,有时候因为需求不同,我们需要把RAR压缩文件转换成ZIP格式,那要如何操作呢?下面小编分享2种简单的方法. 方法一: 如果需要转换的RAR压缩包不是很多,我们可以直接把文件名 ...
- 利用ffmpeg将avi格式文件转成mp4格式
简介:在一些场景中,需要将avi格式文件转成mp4格式.可以使用ffmepg进行处理.同理,针对某文件夹目录下所有的文件进行处理,推荐使用 os.walk(). 相关攻略: 1.win10:安装ffm ...
- 遍历文件夹(含子文件夹)方法
做法基本上有2大类: ① 经典Dir ② FSO 即 Scripting. File System Object 的[文件系统对象]脚本方法. 一开始可能Dir方法较为普遍,但随着水平的提高,应用FS ...
- python实现将子文件夹下的图片复制到新的文件夹并重命名
一.要求 在文件夹中有若干子文件夹,且子文件夹中有若干图片,按照要求将子文件夹中符合命名的图片复制到新的文件夹中,并重新命名这些图片. 即将在train文件夹中有若干命名为rgb_0001_json的 ...
- matlab bdir 排序,命令行 - 如何获取按文件夹名称排序的子文件夹及其文件列表
命令行 - 如何获取按文件夹名称排序的子文件夹及其文件列表 我可以使用dir命令行来获取子文件夹及其文件的列表,按文件夹名称排序,而不仅仅是文件名? 运用 dir / s / b / o:gn> ...
- postman导出请求url_postman接口测试之复制多个接口或collections到某个子文件夹或collections下...
一.痛点 1.postman只支持复制一个请求,或者一个子文件夹,但是不支持复制多个请求,或者整个collections到某个子文件夹或者某个collections下. 2.网上查了好一会儿,没有一个 ...
- python 包 子文件夹调用_15步,你就能拥有自己的Python程序包
每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇Python开源程序包的制作指南,希望这个包含了具体操作步骤的指南能让你在构建程序包时不用花那么多耐心和时间.(适用于macOS系统的Pytho ...
- java 把文件打包成zip文件_java将文件或是文件夹打包压缩成zip格式
导读热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.BufferedInputStream; impo ...
最新文章
- 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
- leetcode 组合总和
- c语言填空三个数找中间大小,计算机文化基础复习题及答案(精华)
- vue init webpack vue-demo01复杂安装的详解
- python比较三个数_python经典练习题(三)
- 猜拳游戏html,JavaScript中实现猜拳小游戏
- 要重复多少次变成潜意识_新股要申购多少次才能保证一定中签?
- Lua游戏开发----游戏搭建
- 自己写代码解析工具的注意事项
- 认真测试直播软件,【转】如何测试直播软件
- MATLAB-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化
- PeopleCert认证证书核验真伪(含ITIL、PRINCE2、DevOps、Scrum……等证书)
- Win7系统怎么截图快捷键
- 百度开放平台SDK错误解决
- 微信小程序打印实时日志
- ︰【】奥立诚生物科技 奥立诚生物科技研发的华龙6号蜈蚣 成养殖行业的亮点
- 【转载】JPEG2000
- Cocos技术派 | TS版属性面板定义高级篇
- 【20200401程序设计思维与实践 Week7作业】
- 安全基础--18--嵌入式基础之系统硬件