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
);
}
}
}
}
查看全文
相关阅读:
ie下table无法设置宽度的坑,解决方案:在td里面添加div把td宽度撑开即可。
js simple drag.
javascript事件捕获机制,dom tree
WPF,布局,Menu,MenuItem,DockPanel,Grid,DockPanel.Dock='',ToolBar,Content,Image,Uri
.net IntPtr ==interoperable pointer
Why do I keep getting mixed tabs and spaces in a Visual Studio C# code window?[vs power tools issue transfered]
vs nuget package control.
Introduction to the WinPcap Networking Libraries
读懂这一篇,集群节点不下线
函数组合的 N 种模式
原文地址:https://www.cnblogs.com/bobofsj11/p/1234679.html
最新文章
011 RGW的SwiftAPi支持
010 Ceph RGW对象存储
009 Ceph RBD增量备份与恢复
008 Ceph集群数据同步
007 Ceph手动部署单节点
006 管理Ceph的RBD块设备
005 Ceph配置文件及用户管理
004 ceph存储池
Java实现 LeetCode 816 模糊坐标(暴力)
Java实现 LeetCode 816 模糊坐标(暴力)
热门文章
Java实现 LeetCode 816 模糊坐标(暴力)
Java实现 LeetCode 815 公交路线(创建关系+BFS)
Java实现 LeetCode 815 公交路线(创建关系+BFS)
Java实现 LeetCode 815 公交路线(创建关系+BFS)
Java实现 LeetCode 814 二叉树剪枝 (遍历树)
Java实现 LeetCode 814 二叉树剪枝 (遍历树)
Java实现 LeetCode 814 二叉树剪枝 (遍历树)
Java实现 LeetCode 813 最大平均值和的分组 (DFS+DP记忆化搜索)
UML系列,使用UML实现GOF Design patterns,常用模式类图解读
StarUML 系列,静态图与动态图,用例图,类图【ps:熟悉一下starUML】
Copyright © 2011-2022 走看看