利用SharpZipLib進行文件的壓縮和解壓縮
系統
2156 0
首先需要在項目里引用SharpZipLib.dll。然后修改其中的關于壓縮和解壓縮的類。實現源碼如下:
/**/
///
<summary>
///
壓縮文件
///
</summary>
using
System;
using
System.IO;
using
ICSharpCode.SharpZipLib.Checksums;
using
ICSharpCode.SharpZipLib.Zip;
using
ICSharpCode.SharpZipLib.GZip;
namespace
Compression
...
{
public
class
ZipClass
...
{
public
void
ZipFile(
string
FileToZip,
string
ZipedFile,
int
CompressionLevel,
int
BlockSize)
...
{
//
如果文件沒有找到,則報錯
if
(
!
System.IO.File.Exists(FileToZip))
...
{
throw
new
System.IO.FileNotFoundException(
"
Thespecifiedfile
"
+
FileToZip
+
"
couldnotbefound.Zippingaborderd
"
);
}
System.IO.FileStreamStreamToZip
=
new
System.IO.FileStream(FileToZip,System.IO.FileMode.Open,System.IO.FileAccess.Read);
System.IO.FileStreamZipFile
=
System.IO.File.Create(ZipedFile);
ZipOutputStreamZipStream
=
new
ZipOutputStream(ZipFile);
ZipEntryZipEntry
=
new
ZipEntry(
"
ZippedFile
"
);
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte
[]buffer
=
new
byte
[BlockSize];
System.Int32size
=
StreamToZip.Read(buffer,
0
,buffer.Length);
ZipStream.Write(buffer,
0
,size);
try
...
{
while
(size
<
StreamToZip.Length)
...
{
int
sizeRead
=
StreamToZip.Read(buffer,
0
,buffer.Length);
ZipStream.Write(buffer,
0
,sizeRead);
size
+=
sizeRead;
}
}
catch
(System.Exceptionex)
...
{
throw
ex;
}
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
}
public
void
ZipFileMain(
string
[]args)
...
{
string
[]filenames
=
Directory.GetFiles(args[
0
]);
Crc32crc
=
new
Crc32();
ZipOutputStreams
=
new
ZipOutputStream(File.Create(args[
1
]));
s.SetLevel(
6
);
//
0-storeonlyto9-meansbestcompression
foreach
(
string
file
in
filenames)
...
{
//
打開壓縮文件
FileStreamfs
=
File.OpenRead(file);
byte
[]buffer
=
new
byte
[fs.Length];
fs.Read(buffer,
0
,buffer.Length);
ZipEntryentry
=
new
ZipEntry(file);
entry.DateTime
=
DateTime.Now;
//
setSizeandthecrc,becausetheinformation
//
aboutthesizeandcrcshouldbestoredintheheader
//
ifitisnotsetitisautomaticallywritteninthefooter.
//
(inthiscasesize==crc==-1intheheader)
//
SomeZIPprogramshaveproblemswithzipfilesthatdon'tstore
//
thesizeandcrcintheheader.
entry.Size
=
fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc
=
crc.Value;
s.PutNextEntry(entry);
s.Write(buffer,
0
,buffer.Length);
}
s.Finish();
s.Close();
}
}
}
現在再來看看解壓文件類的源碼
/**/
///
<summary>
///
解壓文件
///
</summary>
using
System;
using
System.Text;
using
System.Collections;
using
System.IO;
using
System.Diagnostics;
using
System.Runtime.Serialization.Formatters.Binary;
using
System.Data;
using
ICSharpCode.SharpZipLib.BZip2;
using
ICSharpCode.SharpZipLib.Zip;
using
ICSharpCode.SharpZipLib.Zip.Compression;
using
ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using
ICSharpCode.SharpZipLib.GZip;
namespace
DeCompression
...
{
public
class
UnZipClass
...
{
public
void
UnZip(
string
[]args)
...
{
ZipInputStreams
=
new
ZipInputStream(File.OpenRead(args[
0
]));
ZipEntrytheEntry;
while
((theEntry
=
s.GetNextEntry())
!=
null
)
...
{
string
directoryName
=
Path.GetDirectoryName(args[
1
]);
string
fileName
=
Path.GetFileName(theEntry.Name);
//
生成解壓目錄
Directory.CreateDirectory(directoryName);
if
(fileName
!=
String.Empty)
...
{
//
解壓文件到指定的目錄
FileStreamstreamWriter
=
File.Create(args[
1
]
+
theEntry.Name);
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
;
}
}
streamWriter.Close();
}
}
s.Close();
}
}
}
有了壓縮和解壓縮的類以后,就要在窗體里調用了。怎么?是新手,不會調用?Ok,接著往下看如何在窗體里調用。
首先在窗體里放置兩個命令按鈕(不要告訴我你不會放啊~),然后編寫以下源碼
/// <summary>
/// 調用源碼
/// </summary>
private void button2_Click_1(object sender, System.EventArgs e)
{
string []FileProperties=new string[2];
FileProperties[0]="C:/unzipped/";//待壓縮文件目錄
FileProperties[1]="C:/zip/a.zip"; //壓縮后的目標文件
ZipClass Zc=new ZipClass();
Zc.ZipFileMain(FileProperties);
}
private void button2_Click(object sender, System.EventArgs e)
{
string []FileProperties=new string[2];
FileProperties[0]="C:/zip/test.zip";//待解壓的文件
FileProperties[1]="C:/unzipped/";//解壓后放置的目標目錄
UnZipClass UnZc=new UnZipClass();
UnZc.UnZip(FileProperties);
}
好了,到此為止,如何壓縮和解壓縮的類都已經完成了
利用SharpZipLib進行文件的壓縮和解壓縮
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元