zoukankan
html css js c++ java
SharpZipLib压缩文件夹及文件
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.IO;
using
ICSharpCode.SharpZipLib;
using
ICSharpCode.SharpZipLib.Zip;
using
ICSharpCode.SharpZipLib.Checksums;
/**/
/*
* 解压缩
* 该程序压缩和解压配合才能使用
* 普通用 Winrar 压缩的文件该解压不能通过
*/
namespace
SharpZipLib
{
/**/
///
///
压缩类
///
public
class
ZipClass
{
/**/
///
///
递归压缩文件夹方法
///
///
///
///
private
static
bool
ZipFileDictory(
string
FolderToZip, ZipOutputStream s,
string
ParentFolderName)
{
bool
res
=
true
;
string
[] folders, filenames;
ZipEntry entry
=
null
;
FileStream fs
=
null
;
Crc32 crc
=
new
Crc32();
try
{
//
创建当前文件夹
entry
=
new
ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip)
+
"
/
"
));
//
加上 “/” 才会当成是文件夹创建
s.PutNextEntry(entry);
s.Flush();
//
先压缩文件,再递归压缩文件夹
filenames
=
Directory.GetFiles(FolderToZip);
foreach
(
string
file
in
filenames)
{
//
打开压缩文件
fs
=
File.OpenRead(file);
byte
[] buffer
=
new
byte
[fs.Length];
fs.Read(buffer,
0
, buffer.Length);
entry
=
new
ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip)
+
"
/
"
+
Path.GetFileName(file)));
entry.DateTime
=
DateTime.Now;
entry.Size
=
fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc
=
crc.Value;
s.PutNextEntry(entry);
s.Write(buffer,
0
, buffer.Length);
}
}
catch
{
res
=
false
;
}
finally
{
if
(fs
!=
null
)
{
fs.Close();
fs
=
null
;
}
if
(entry
!=
null
)
{
entry
=
null
;
}
GC.Collect();
GC.Collect(
1
);
}
folders
=
Directory.GetDirectories(FolderToZip);
foreach
(
string
folder
in
folders)
{
if
(
!
ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip))))
{
return
false
;
}
}
return
res;
}
/**/
///
///
压缩目录
///
///
待压缩的文件夹,全路径格式
///
压缩后的文件名,全路径格式
///
private
static
bool
ZipFileDictory(
string
FolderToZip,
string
ZipedFile, String Password)
{
bool
res;
if
(
!
Directory.Exists(FolderToZip))
{
return
false
;
}
ZipOutputStream s
=
new
ZipOutputStream(File.Create(ZipedFile));
s.SetLevel(
6
);
s.Password
=
Password;
res
=
ZipFileDictory(FolderToZip, s,
""
);
s.Finish();
s.Close();
return
res;
}
/**/
///
///
压缩文件
///
///
要进行压缩的文件名
///
压缩后生成的压缩文件名
///
private
static
bool
ZipFile(
string
FileToZip,
string
ZipedFile, String Password)
{
//
如果文件没有找到,则报错
if
(
!
File.Exists(FileToZip))
{
throw
new
System.IO.FileNotFoundException(
"
指定要压缩的文件:
"
+
FileToZip
+
"
不存在!
"
);
}
//
FileStream fs = null;
FileStream ZipFile
=
null
;
ZipOutputStream ZipStream
=
null
;
ZipEntry ZipEntry
=
null
;
bool
res
=
true
;
try
{
ZipFile
=
File.OpenRead(FileToZip);
byte
[] buffer
=
new
byte
[ZipFile.Length];
ZipFile.Read(buffer,
0
, buffer.Length);
ZipFile.Close();
ZipFile
=
File.Create(ZipedFile);
ZipStream
=
new
ZipOutputStream(ZipFile);
ZipStream.Password
=
Password;
ZipEntry
=
new
ZipEntry(Path.GetFileName(FileToZip));
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(
6
);
ZipStream.Write(buffer,
0
, buffer.Length);
}
catch
{
res
=
false
;
}
finally
{
if
(ZipEntry
!=
null
)
{
ZipEntry
=
null
;
}
if
(ZipStream
!=
null
)
{
ZipStream.Finish();
ZipStream.Close();
}
if
(ZipFile
!=
null
)
{
ZipFile.Close();
ZipFile
=
null
;
}
GC.Collect();
GC.Collect(
1
);
}
return
res;
}
/**/
///
///
压缩文件 和 文件夹
///
///
待压缩的文件或文件夹,全路径格式
///
压缩后生成的压缩文件名,全路径格式
///
public
static
bool
Zip(String FileToZip, String ZipedFile, String Password)
{
if
(Directory.Exists(FileToZip))
{
return
ZipFileDictory(FileToZip, ZipedFile, Password);
}
else
if
(File.Exists(FileToZip))
{
return
ZipFile(FileToZip, ZipedFile, Password);
}
else
{
return
false
;
}
}
}
/**/
///
///
解压类
///
public
class
UnZipClass
{
/**/
///
///
解压功能(解压压缩文件到指定目录)
///
///
待解压的文件
///
指定解压目标目录
public
static
void
UnZip(
string
FileToUpZip,
string
ZipedFolder,
string
Password)
{
if
(
!
File.Exists(FileToUpZip))
{
return
;
}
if
(
!
Directory.Exists(ZipedFolder))
{
Directory.CreateDirectory(ZipedFolder);
}
ZipInputStream s
=
null
;
ZipEntry theEntry
=
null
;
string
fileName;
FileStream streamWriter
=
null
;
try
{
s
=
new
ZipInputStream(File.OpenRead(FileToUpZip));
s.Password
=
Password;
while
((theEntry
=
s.GetNextEntry())
!=
null
)
{
if
(theEntry.Name
!=
String.Empty)
{
fileName
=
Path.Combine(ZipedFolder, theEntry.Name);
/**/
///
判断文件路径是否是文件夹
if
(fileName.EndsWith(
"
/
"
)
||
fileName.EndsWith(
"
\\
"
))
{
Directory.CreateDirectory(fileName);
continue
;
}
streamWriter
=
File.Create(fileName);
int
size
=
2048
;
byte
[] data
=
new
byte
[
2048
];
while
(
true
)
{
size
=
s.Read(data,
0
, data.Length);
if
(size
>
0
)
{
streamWriter.Write(data,
0
, size);
}
else
{
break
;
}
}
}
}
}
finally
{
if
(streamWriter
!=
null
)
{
streamWriter.Close();
streamWriter
=
null
;
}
if
(theEntry
!=
null
)
{
theEntry
=
null
;
}
if
(s
!=
null
)
{
s.Close();
s
=
null
;
}
GC.Collect();
GC.Collect(
1
);
}
}
}
}
查看全文
相关阅读:
Java日期工具类,Java时间工具类,Java时间格式化
js 小数取整,js 小数向上取整,js小数向下取整
Tomcat v7.0 Server at localhost are already in use,tomcat提示端口被占用,tomcat端口已经被使用,tomcat端口占用
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大
Jquery Easyui验证扩展,Easyui验证,Easyui校验,js正则表达式
根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期
jquery easyui combobox 级联及触发事件,combobox级联
js计算2个日期相差的天数,两个日期相差的天数,日期相隔天数
设置checkbox选中,设置radio选中,根据值设置checkbox选中,checkbox勾选
layer弹出层不居中解决方案,layer提示不屏幕居中解决方法,layer弹窗不居中解决方案
原文地址:https://www.cnblogs.com/bobofsj11/p/1234679.html
最新文章
【bzoj4417】[Shoi2013]超级跳马 矩阵乘法
【bzoj3142】[Hnoi2013]数列 数学
【hdu2089】不要62 数位dp
【hdu4507】吉哥系列故事——恨7不成妻 数位dp
【hdu4734】F(x) 数位dp
【hdu3555】Bomb 数位dp
浅谈C#实现Web代理服务器的几大步骤
简历上如果出现过于高大上的项目,反而过犹不及:再论如何通过项目引出技术(应该做好充足的准备工作,否则很惨。。。)
Vue.js——60分钟快速入门
Python 爬虫从入门到进阶之路
热门文章
C# using语句 中间出现exception后 using仍然会dispose
using 关键字有两个主要用途
Docker如何部署Python项目
[转载]WPF控件拖动
C#日期格式转换大全
通俗易懂的支持向量机SVM
Golang 项目 GOPATH 总结
Laravel 项目开发环境配置
百度云虚拟主机
Golang 开发框架 gin 项目时笔记
Copyright © 2011-2022 走看看