代码演示用 .NET 4.5 (C# 5.0)自带的压缩类 ZipArchive 创建一个压缩文件
代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace SolutionZip
{
class SolutionZip
{
static void Main(string[] args)
{
string rootFolder = ".\\";
string archiveName = "Archive.zip"; if (args.Length > )
{
rootFolder = args[];
}
if (args.Length > )
{
archiveName = args[];
}
List<string> exceptions = new List<string>();
exceptions.Add(@".user");
exceptions.Add(@".suo");
exceptions.Add(@"\bin");
exceptions.Add(@"\obj");
exceptions.Add(@"\packages"); int filesAdded = CreateArchive(rootFolder,
exceptions, archiveName);
Console.WriteLine(String.Format(" {0} file(s) added ",
filesAdded));
Console.ReadLine();
} public static int CreateArchive(string folder,
IList<string> exceptions, string archiveName)
{
int filesCount = ;
string folderFullPath = Path.GetFullPath(folder);
string archivePath = Path.Combine(folderFullPath, archiveName);
if (File.Exists(archivePath))
{
Console.WriteLine(
string.Format(@"File '{0}' already exists. Overwrite (y/n): ",
archiveName));
string read = Console.ReadLine();
if (read.ToLower() == "y")
{
File.Delete(archivePath);
}
else
{
Console.WriteLine(string.Format(@"Archive {0} already exists.
Aborting!", archivePath));
return ;
}
}
IEnumerable<string> files = Directory.EnumerateFiles(folder,
"*.*", SearchOption.AllDirectories);
using (ZipArchive archive = ZipFile.Open(archivePath, ZipArchiveMode.Create))
{
foreach (string file in files)
{
if (!Excluded(file, exceptions))
{
try
{
var addFile = Path.GetFullPath(file);
if (addFile != archivePath)
{
addFile = addFile.Substring(folderFullPath.Length);
Console.WriteLine("Adding " + addFile);
archive.CreateEntryFromFile(file, addFile);
filesCount++;
}
}
catch (IOException ex)
{
Console.WriteLine(@"Failed to add {0} due to error :
{1} \n Ignoring it!", file, ex.Message);
}
}
}
}
return filesCount;
} private static bool Excluded(string file, IList<string> exceptions)
{
List<String> folderNames = (from folder in exceptions
where folder.StartsWith(@"\")
|| folder.StartsWith(@"/")
select folder).ToList<string>();
if (!exceptions.Contains(Path.GetExtension(file)))
{
foreach (string folderException in folderNames)
{
if(Path.GetDirectoryName(file).Contains(folderException))
{
return true;
}
}
return false;
}
return true;
}
}
}
图文解释地址:http://www.dotnetcurry.com/showarticle.aspx?ID=974
谢谢浏览!
代码演示用 .NET 4.5 (C# 5.0)自带的压缩类 ZipArchive 创建一个压缩文件的更多相关文章
- JUC 并发编程--10, 阻塞队列之--LinkedBlockingDeque 工作窃取, 代码演示
直接上代码 class LinkedBlockingDequeDemo { // 循环是否结束的开关 private static volatile boolean flag1 = true; pri ...
- C++使用代码创建一个Windows桌面应用程序
WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HINSTANCE hInstancem HINSTANCE hPreInstance, ...
- JavaScript: JavaScript的简介和入门代码演示
1.Javascript的发展历史介绍: javascript是指的实在网页上编写的编程语言,其主要是控制器html的动态显示效果.HTMl能带来的只是一些基本的页面的风格,而要展示的漂亮使用CSS, ...
- 14种网页jQuery和css3特效插件代码演示
1.网页table增删样式代码 演示和下载地址 2.jQuery左右滑动幻灯片插件 演示和下载地址 3.jQuery文字轮播焦点图 演示和下载地址 4.网页文字焦点图切换 演示和下载地址 5.jQue ...
- 9种jQuery和css3图片动画特效代码演示
1.自由旋转的jQuery图片 演示和下载地址 2.css3阴影动画效果 演示和下载地址 3.拉窗帘特效图片 演示和下载地址 4.css3文字特效动画 演示和下载地址 5.css3时钟代码 演示和下载 ...
- java 覆盖hashCode()深入探讨 代码演示样例
java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...
- Web---session技术代码演示(request,session,servletContext)
Session会话简介与基本知识点 当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户. 会话是指在一段 ...
- javascript 压缩空格代码演示
压缩空格代码演示 主要是讲解 压缩一个字符串两段空格 例如:javascript函数里的空格不论是这样 var s = "Hello World ...
- 单元测试_JUnit常用单元测试注解介绍及代码演示
JUnit常用单元测试注解介绍及代码演示 by:授客 QQ:1033553122 1. 测试环境 1 2. 基础概念 1 3. 常用Annotation 1 4. 运行环境配置 3 maven配置 ...
随机推荐
- el表达式的function标签
使用el调用Java方法 1:EL表达式语法允许开发人员开发自定义函数,以调用java类的方法. ~示例:${el:method(params)} ~在EL表达式中调用的只能是java类的静态方法. ...
- lamper技能树
- 解决连接MySql速度慢的方法
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢.解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve. 原因是 ...
- EWM一个仓库号对应ERP多个PLANT的配置
1. CIF多个DC到EWM系统,创建SCU并配置成仓 2. tx:/sapapo/loc3 对多个DC生成分配模型 3. IMG:分配仓库编号 去掉缺省的授权处理方 4. 维护SCU hierarc ...
- 实现多项式的JAVA类
p = coef[i] + (x * p); } Poly ...
- tbb flow graph node types
- Android composite adb interface
我的平板连上电脑后,在eclipse的DDMS中查看不到.很奇怪以前不会,我以为在进程中有其他的adb.exe冲突.查看任务管理器没有看到其他adb.exe进程.然后重启eclipse也不用,重启电脑 ...
- mac上使用终端生成RSA公钥和密钥
首先确保你的电脑上安装了openssl,一般mac系统安装后都会自动安装!怎么安装??.....请百度...... 安装命令如下: sudo apt-get install openssl 在你的任何 ...
- GEMR: Get the parent window for view
Window window = Utilities.GetVisualParent<Window>(this); if (window != null) { window.DialogRe ...
- 高大上技术之sql解析
Question: 为何sql解析和高大上有关系?Answer:因为数据库永远都是系统的核心,CRUD如此深入码农的内心...如果能把CRUD改造成高大上技术,如此不是造福嘛... CRUD就是Cre ...