ASP.NET教程之C#中使用SharpZipLib举行紧缩息争压
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。紧缩 我在做项目标时分必要将文件举行紧缩息争紧缩,因而就从http://www.icsharpcode.net下载了关于紧缩息争紧缩的源码,可是下载上去后,面临这么多的代码,一时不知怎样动手。只好耐下心来,渐渐的研讨,总算找到了路径。针对本人的必要改写了文件紧缩息争紧缩的两个类,分离为ZipClass和UnZipClass。个中碰着了很多坚苦,就决意写出来紧缩息争压的程序后,必定把源码贴出来共享,让初次打仗紧缩息争紧缩的伴侣能够少走些弯路。上面就来注释怎样在C#里用http://www.icsharpcode.net下载的SharpZipLib举行文件的紧缩息争紧缩。起首必要在项目里援用sharpziplib.dll。然后修正个中的关于紧缩息争紧缩的类。完成源码以下:
///<summary>
///紧缩文件
///</summary>
usingSystem;
usingSystem.IO;
usingICSharpCode.SharpZipLib.Checksums;
usingICSharpCode.SharpZipLib.Zip;
usingICSharpCode.SharpZipLib.GZip;
namespaceCompression
{
publicclassZipClass
{
publicvoidZipFile(stringFileToZip,stringZipedFile,intCompressionLevel,intBlockSize)
{
//假如文件没有找到,则报错
if(!System.IO.File.Exists(FileToZip))
{
thrownewSystem.IO.FileNotFoundException("Thespecifiedfile"+FileToZip+"couldnotbefound.Zippingaborderd");
}
system.io.filestreamStreamToZip=newSystem.IO.FileStream(FileToZip,System.IO.FileMode.Open,System.IO.FileAccess.Read);
System.IO.FileStreamZipFile=System.IO.File.Create(ZipedFile);
ZipOutputStreamZipStream=newZipOutputStream(ZipFile);
ZipEntryZipEntry=newZipEntry("ZippedFile");
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte[]buffer=newbyte;
System.Int32size=StreamToZip.Read(buffer,0,buffer.Length);
ZipStream.Write(buffer,0,size);
try
{
while(size<StreamToZip.Length)
{
intsizeRead=StreamToZip.Read(buffer,0,buffer.Length);
ZipStream.Write(buffer,0,sizeRead);
size+=sizeRead;
}
}
catch(System.Exceptionex)
{
throwex;
}
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
}
publicvoidZipFileMain(string[]args)
{
string[]filenames=Directory.GetFiles(args);
crc32crc=newCrc32();
ZipOutputStreams=newZipOutputStream(File.Create(args));
s.setlevel(6);//0-storeonlyto9-meansbestcompression
foreach(stringfileinfilenames)
{
//翻开紧缩文件
FileStreamfs=File.OpenRead(file);
byte[]buffer=newbyte;
fs.Read(buffer,0,buffer.Length);
ZipEntryentry=newZipEntry(file);
entry.datetime=DateTime.Now;
//setSizeandthecrc,becausetheinformation
//aboutthesizeandcrcshouldbestoredintheheader
//ifitisnotsetitisautomaticallywritteninthefooter.
//(inthiscasesize==crc==-1intheheader)
//SomeZIPprogramshaveproblemswithzipfilesthatdontstore
//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>
usingSystem;
usingSystem.Text;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Diagnostics;
usingSystem.Runtime.Serialization.Formatters.Binary;
usingSystem.Data;
usingICSharpCode.SharpZipLib.BZip2;
usingICSharpCode.SharpZipLib.Zip;
usingICSharpCode.SharpZipLib.Zip.Compression;
usingICSharpCode.SharpZipLib.Zip.Compression.Streams;
usingICSharpCode.SharpZipLib.GZip;
namespaceDeCompression
{
publicclassUnZipClass
{
publicvoidUnZip(string[]args)
{
ZipInputStreams=newZipInputStream(File.OpenRead(args));
zipentrytheEntry;
while((theEntry=s.GetNextEntry())!=null)
{
stringdirectoryName=Path.GetDirectoryName(args);
stringfileName=Path.GetFileName(theEntry.Name);
//天生解压目次
Directory.CreateDirectory(directoryName);
if(fileName!=String.Empty)
{
//解压文件到指定的目次
FileStreamstreamWriter=File.Create(args+theEntry.Name);
intsize=2048;
byte[]data=newbyte;
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>
privatevoidbutton2_Click_1(objectsender,System.EventArgse)
{
string[]FileProperties=newstring;
FileProperties="C:unzipped";//待紧缩文件目次
FileProperties="C:zipa.zip";//紧缩后的方针文件
ZipClassZc=newZipClass();
Zc.ZipFileMain(FileProperties);
}
privatevoidbutton2_Click(objectsender,System.EventArgse)
{
string[]FileProperties=newstring;
FileProperties="C:zip est.zip";//待解压的文件
FileProperties="C:unzipped";//解压后安排的方针目次
UnZipClassUnZc=newUnZipClass();
UnZc.UnZip(FileProperties);
}
好了,到此为止,怎样紧缩息争紧缩的类都已完成了,必要的伴侣间接拿走调吧。
我觉得很重要,一般所说的不重要应该指的是:你学好一种以后再学另一种就很容易了。(因为这样大家可能有一个错觉就是语言不是很重要,只要随便学一种就可以了,其实不是这样的。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 那么,ASP.Net有哪些改进呢? 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
页:
[1]