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
);
}
}
}
}
查看全文
相关阅读:
Cs231n课堂内容记录-Lecture1 导论
Linux实时查询GPU使用命令
导出excel的简单方法
正则表达式的一些应用
4、Python语法之变量
javaScript中对typeof 和 instanceof 的使用及理解
JavaScrpt 变量作用域
真香的flex弹性布局
css调试与样式优先级
css3新样式
原文地址:https://www.cnblogs.com/bobofsj11/p/1234679.html
最新文章
分析浏览器输入域名到网页显示出来这个过程
工作面试经历
c# 操作word
sql 分页查询 (每次6行 )
session传值取值
使用Response下载(支持任何格式)
asp.net使用FileUpload控件上传图片且重命名
SQL行列转换
jQuery表单验证正则表达式-简单
NetCore开源项目集合
热门文章
gitlab 之 升级、迁移
docker 配置 http 访问
gitlab 之 项目管理
mac os 下 vs code 开发 .net core
Cs231n课堂内容记录-Lecture 4-Part2 神经网络
Cs231n课堂内容记录-Lecture 4-Part1 反向传播及神经网络
Win10 C盘桌面文件右上方的两个蓝色箭头解决方案
Cs231n课堂内容记录-Lecture 3 最优化
Cs231n课堂内容记录-Lecture2-Part2 线性分类
Cs231n课堂内容记录-Lecture2-Part1 图像分类
Copyright © 2011-2022 走看看