C# 基于SharpZipLib 实现 文件压缩,以及解压
来源:互联网 发布:微盘交易php源码 编辑:程序博客网 时间:2024/05/17 03:57
//压缩文件 public static void Zip(string srcFile, string dstFile, int bufferSize) { //创建压缩文件路径 using (FileStream fileStreamOut = new FileStream(dstFile, FileMode.Create, FileAccess.Write)) { string[] fileList = srcFile.Split('*'); //创建压缩流 using (ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut)) { //循环文件列表 (我这里并没有做判断,在操作的时候 需要进行判断 当前路径是否有效,如果路径是无效的,后面的操作会抛出异常) for (int i = 0; i < fileList.Length; i++) { //打开需要压缩的文件 using (FileStream fileStreamIn = new FileStream(fileList[i], FileMode.Open, FileAccess.Read)) { if (null == fileStreamIn) { return; } byte[] buffer = new byte[fileStreamIn.Length]; ZipEntry entry = new ZipEntry(Path.GetFileName(fileList[i])); zipOutStream.PutNextEntry(entry); int size; size = fileStreamIn.Read(buffer, 0, buffer.Length); zipOutStream.Write(buffer, 0, size); zipOutStream.Flush(); } } } } } /// <summary> /// 使用SharpZipLib解压缩Zip文件 /// </summary> /// <param name="srcFile">Zip源文件</param> /// <param name="dstFile">解压出来的文件</param> /// <param name="bufferSize">缓冲大小</param> public static void UnZip(string srcFile, string dstFile, int bufferSize) { using (FileStream fileStreamIn = new FileStream(srcFile, FileMode.Open, FileAccess.Read)) { using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn)) { ZipEntry entry = zipInStream.GetNextEntry(); //循环读取,是否包含下一个文件 while (entry != null) { //此为当前文件的大小 long Length = zipInStream.Length; //此为文件的名称 string name = entry.Name; using (FileStream fileStreamOut = new FileStream(dstFile + @"\" + entry.Name, FileMode.Create, FileAccess.Write)) { int size; byte[] buffer = new byte[bufferSize]; do { size = zipInStream.Read(buffer, 0, buffer.Length); fileStreamOut.Write(buffer, 0, size); } while (size > 0); fileStreamOut.Flush(); } entry = zipInStream.GetNextEntry(); } } } }