| 发表于:2007-02-15 15:52:1913楼 得分:0 |
from http://www.cnblogs.com/aiyagaze/archive/2006/11/30/576995.html using system; using system.text; using system.runtime.serialization; using system.runtime.serialization.formatters.binary; using system.collections; using system.io; using system.io.compression; namespace greatchn.gzipcompression { public class gzipcompress { /**//// <summary> /// 对目标文件夹进行压缩,将压缩结果保存为指定文件 /// </summary> /// <param name= "dirpath "> 目标文件夹 </param> /// <param name= "filename "> 压缩文件 </param> public static void compress(string dirpath, string filename) { arraylist list = new arraylist(); foreach (string f in directory.getfiles(dirpath)) { byte[] destbuffer = file.readallbytes(f); serializefileinfo sfi = new serializefileinfo(f, destbuffer); list.add(sfi); } iformatter formatter = new binaryformatter(); using (stream s = new memorystream()) { formatter.serialize(s, list); s.position = 0; createcompressfile(s, filename); } } /**//// <summary> /// 对目标压缩文件解压缩,将内容解压缩到指定文件夹 /// </summary> /// <param name= "filename "> 压缩文件 </param> /// <param name= "dirpath "> 解压缩目录 </param> public static void decompress(string filename, string dirpath) { using (stream source = file.openread(filename)) { using (stream destination = new memorystream()) { using (gzipstream input = new gzipstream(source, compressionmode.decompress, true)) { byte[] bytes = new byte[4096]; int n; while ((n = input.read(bytes, 0, bytes.length)) != 0) { destination.write(bytes, 0, n); } } destination.flush(); destination.position = 0; deserializefiles(destination, dirpath); } } } private static void deserializefiles(stream s, string dirpath) { binaryformatter b = new binaryformatter(); arraylist list = (arraylist)b.deserialize(s); foreach (serializefileinfo f in list) { string newname = dirpath + path.getfilename(f.filename); using (filestream fs = new filestream(newname, filemode.create, fileaccess.write)) { fs.write(f.filebuffer, 0, f.filebuffer.length); fs.close(); } } } private static void createcompressfile(stream source, string destinationname) { using (stream destination = new filestream(destinationname, filemode.create, fileaccess.write)) { using (gzipstream output = new gzipstream(destination, compressionmode.compress)) { byte[] bytes = new byte[4096]; int n; while ((n = source.read(bytes, 0, bytes.length)) != 0) { output.write(bytes, 0, n); } } } } [serializable] class serializefileinfo { public serializefileinfo(string name, byte[] buffer) { filename = name; filebuffer = buffer; } string filename; public string filename { get { return filename; } } byte[] filebuffer; public byte[] filebuffer { get { return filebuffer; } } } } } | | |
|