递归遍历目录 ZipSetp(string strDirectory, ZipOutputStream s, string parentPath) { if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar) { strDirectory += Path.DirectorySeparatorChar; } var crc = new Crc32(); var filenames = Directory.GetFileSystemEntries(strDirectory); try { (var file in filenames) { (Directory.Exists(file)) { var pPath = parentPath; pPath += file.Substring(file.LastIndexOf(, StringComparison.Ordinal) + 1); pPath += ; ZipSetp(file, s, pPath); } { (var fs = File.OpenRead(file)) { var buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); , StringComparison.Ordinal) + 1); var entry = new ZipEntry(fileName) { DateTime = DateTime.Now, Size = fs.Length }; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; s.PutNextEntry(entry); s.Write(buffer, 0, buffer.Length); } } } } catch (IOException ioex) { throw new IOException(ioex.Message); } catch (Exception ex) { throw new Exception(ex.Message); } }
5.解压缩一个 zip 文件:解压缩一个 zip 文件。 UnZip(string zipedFile, string strDirectory, string password, bool overWrite) { if (string.IsNullOrEmpty(zipedFile)) { throw new ArgumentException(zipedFile); } if (string.IsNullOrEmpty(strDirectory)) { throw new ArgumentException(strDirectory); } if (string.IsNullOrEmpty(password)) { throw new ArgumentException(password); } if (strDirectory == "") { strDirectory = Directory.GetCurrentDirectory(); } )) { strDirectory = strDirectory + ; } try { using (var s = new ZipInputStream(File.OpenRead(zipedFile))) { s.Password = password; ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { var directoryName = string.Empty; var pathToZip = theEntry.Name; if (pathToZip != "") { directoryName = Path.GetDirectoryName(pathToZip) + ; } var fileName = Path.GetFileName(pathToZip); Directory.CreateDirectory(strDirectory + directoryName); if (fileName == "") continue; if ((!File.Exists(strDirectory + directoryName + fileName) || !overWrite) && (File.Exists(strDirectory + directoryName + fileName))) continue; using (var streamWriter = File.Create(strDirectory + directoryName + fileName)) { var data = new byte[2048]; while (true) { var size = s.Read(data, 0, data.Length); if (size > 0) streamWriter.Write(data, 0, size); else break; } streamWriter.Close(); } } s.Close(); } } catch (IOException ioex) { throw new IOException(ioex.Message); } catch (Exception ex) { throw new Exception(ex.Message); } }
四.总结:以上是对SharpZipLib组件的相关介绍,本文的讲解上比较的浅显,如果需要深入的学习可以进入官网进行详细的学习。组件的功能是很强大的,如何在项目中使用组件,完成我们在项目中需要实现的功能,这就是对每个开发者提出了要求,需要我们仔细的去考虑。
任何学习都需要我们自己去探索和思考,对于一个开发者来说,最重要的就是思考,因为在我们的职业生涯中,没有什么的重要性能够超过思考。如果有不足之处还望各位读者包含,并留言指正。
.NET组件介绍系列:
一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)
最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)
免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
免费高效实用的Excel操作组件NPOI(.NET组件介绍之六)
免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)