博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net中文件的压缩与解压
阅读量:5216 次
发布时间:2019-06-14

本文共 2815 字,大约阅读时间需要 9 分钟。

 这里笔者为大家介绍在asp.net中使用文件的压缩与解压。在asp.net中使用压缩给大家带来的好处是显而易见的,首先是减小了服务器端文件存储的空间,其次下载时候下载的是压缩文件想必也会有效果吧,特别是比较大的文件。有的客户可能会很粗心上传的是文件,那么可以通过判断后缀名来判断文件,不是压缩文件,就可以压缩文件,在存储。

  这里笔者引用了一个DLL文件(ICSharpCode.SharpZipLib.dll)(包含在本文代码中),调用其中的函数,就可以对文件进行压缩及解压了。其中压缩笔者主要用到的函数是

1
///
<summary>
2
///
压缩文件
3
///
</summary>
4
///
<param name="fileName">
要压缩的所有文件(完全路径)
</param>
5
///
<param name="name">
压缩后文件路径
</param>
6
///
<param name="Level">
压缩级别
</param>
7
 
public
void
ZipFileMain(
string
[] filenames,
string
name,
int
Level)
8
{
9
ZipOutputStream s
=
new
ZipOutputStream(File.Create(name));
10
Crc32 crc
=
new
Crc32();
11
//
压缩级别
12
s.SetLevel(Level);
//
0 - store only to 9 - means best compression
13
try
14
{
15
foreach
(
string
file
in
filenames)
16
{
17
//
打开压缩文件
18
FileStream fs
=
File.OpenRead(file);
19
20
byte
[] buffer
=
new
byte
[fs.Length];
21
fs.Read(buffer,
0
, buffer.Length);
22
23
//
建立压缩实体
24
ZipEntry entry
=
new
ZipEntry(System.IO.Path.GetFileName(file));
25
26
//
时间
27
entry.DateTime
=
DateTime.Now;
28
29
//
set Size and the crc, because the information
30
//
about the size and crc should be stored in the header
31
//
if it is not set it is automatically written in the footer.
32
//
(in this case size == crc == -1 in the header)
33
//
Some ZIP programs have problems with zip files that don't store
34
//
the size and crc in the header.
35
//
空间大小
36
entry.Size
=
fs.Length;
37
fs.Close();
38
crc.Reset();
39
crc.Update(buffer);
40
entry.Crc
=
crc.Value;
41
s.PutNextEntry(entry);
42
s.Write(buffer,
0
, buffer.Length);
43
}
44
}
45
catch
46
{
47
throw
;
48
}
49
finally
50
{
51
s.Finish();
52
s.Close();
53
}
54
55
}

解压缩的主要代码

1
///
<summary>
2
///
解压文件
3
///
</summary>
4
///
<param name="ZipPath">
被解压的文件路径
</param>
5
///
<param name="Path">
解压后文件的路径
</param>
6
public
void
UnZip(
string
ZipPath,
string
Path)
7
{
8
ZipInputStream s
=
new
ZipInputStream(File.OpenRead(ZipPath));
9
10
ZipEntry theEntry;
11
try
12
{
13
while
((theEntry
=
s.GetNextEntry())
!=
null
)
14
{
15
string
fileName
=
System.IO.Path.GetFileName(theEntry.Name);
16
17
//
生成解压目录
18
Directory.CreateDirectory(Path);
19
20
if
(fileName
!=
String.Empty)
21
{
22
//
解压文件
23
FileStream streamWriter
=
File.Create(Path
+
fileName);
24
25
int
size
=
2048
;
26
byte
[] data
=
new
byte
[
2048
];
27
while
(
true
)
28
{
29
size
=
s.Read(data,
0
, data.Length);
30
if
(size
>
0
)
31
{
32
streamWriter.Write(data,
0
, size);
33
}
34
else
35
{
36
37
streamWriter.Close();
38
streamWriter.Dispose();
39
break
;
40
}
41
}
42
43
streamWriter.Close();
44
streamWriter.Dispose();
45
}
46
}
47
}
48
catch
49
{
50
throw
;
51
}
52
finally
53
{
54
s.Close();
55
s.Dispose();
56
}
57
}
58
}

那么我这里做了个简单的测试程序()

 

这里已知道要被压缩文件,这里只需填入要被压缩到的路径("D:\text\")解压路径一样。这里解压级别越大,压缩的就越厉害。

可以看测试小程序,将解压/压缩引入到你的项目中

转载于:https://www.cnblogs.com/fengyingwang/p/3402100.html

你可能感兴趣的文章
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>
iOS 获取Home键指纹验证
查看>>
Python-Mac 安装 PyQt4
查看>>
P2571 [SCOI2010]传送带
查看>>
哈希表1
查看>>