C#实现文件压缩与解压的方法示例【ZIP格式】
程序员文章站
2023-11-21 09:01:46
本文实例讲述了c#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下:
在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是rar的,但是...
本文实例讲述了c#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下:
在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是rar的,但是由于rar不是一个开放的标准,因此zip成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如sharpziplib就是一个不错的选择。
组件的使用比较简单,请参照下面的代码。点击下载项目源码。
/* * gary zhang -- cbcye@live.com * www.cbcye.com * www.quicklearn.cn * cbcye.cnblogs.com */ using system; using system.collections.generic; using system.text; using system.io; using icsharpcode.sharpziplib.zip; using system.diagnostics; using icsharpcode.sharpziplib.core; namespace testconsole { class program { static void main() { //createzipfile(@"d:\", @"d:\a.zip"); unzipfile(@"d:\a.zip"); console.read(); } private static void createzipfile(string filespath, string zipfilepath) { if (!directory.exists(filespath)) { console.writeline("cannot find directory '{0}'", filespath); return; } try { string[] filenames = directory.getfiles(filespath); using (zipoutputstream s = new zipoutputstream(file.create(zipfilepath))) { s.setlevel(9); // 压缩级别 0-9 //s.password = "123"; //zip压缩文件密码 byte[] buffer = new byte[4096]; //缓冲区大小 foreach (string file in filenames) { zipentry entry = new zipentry(path.getfilename(file)); entry.datetime = datetime.now; s.putnextentry(entry); using (filestream fs = file.openread(file)) { int sourcebytes; do { sourcebytes = fs.read(buffer, 0, buffer.length); s.write(buffer, 0, sourcebytes); } while (sourcebytes > 0); } } s.finish(); s.close(); } } catch (exception ex) { console.writeline("exception during processing {0}", ex); } } private static void unzipfile( string zipfilepath) { if (!file.exists(zipfilepath)) { console.writeline("cannot find file '{0}'", zipfilepath); return; } using (zipinputstream s = new zipinputstream(file.openread(zipfilepath))) { zipentry theentry; while ((theentry = s.getnextentry()) != null) { console.writeline(theentry.name); string directoryname = path.getdirectoryname(theentry.name); string filename = path.getfilename(theentry.name); // create directory if (directoryname.length > 0) { directory.createdirectory(directoryname); } if (filename != string.empty) { using (filestream streamwriter = file.create(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; } } } } } } } } }
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。
下一篇: SpringBoot常见问题小结