之前我们介绍了如何用SharpZipLib
来打.tar.gz压缩包。
但是这个压缩软件有两个问题,一是代码比较多,压缩起来没有那么方便;二是压缩的.tar.gz在linux上解压时会有警告,需要跳过这些警告。
SharpCompress解决了这两个问题,使用SharpCompress压缩的.tar.gz包在linux上是没有警告的。
而且它的代码量可以说相当小了。
using (var zip = File.OpenWrite("C:\\test.tar.gz"))
using (var zipWriter = WriterFactory.Open(zip, ArchiveType.Tar, CompressionType.GZip))
{
zipWriter.WriteAll(filesPath, "*", SearchOption.AllDirectories);
}
是的,你没看错,其实只需要三句代码而已。
第一句var zip = File.OpenWrite("C:\\test.tar.gz")
打开一个压缩文件流。如果不需要生成文件,我们这里可以使用MemonyStream
来生成一个内存流。
第二句var zipWriter = WriterFactory.Open(zip, ArchiveType.Tar, CompressionType.GZip)
,我们用WriterFactory
写工厂打开一个Writer
,第一个参数是我们的流,第二个参数指定我们要写tar
文件,第三个参数是说压缩方式为gzip
。
这样我们就拿到了一个.tar.gz的Writer。
第三句zipWriter.WriteAll(filesPath, "*", SearchOption.AllDirectories);
,就是写入所有的文件,filesPath
是我们要写入的文件路径,*
是通配符,我们可以从这里来指定需要写入哪些类型的文件。SearchOption.AllDirectories
是搜索目录下的所有目录,我们也可以用Top来指定只写第一层,不处理子目录。
这样我们就完成了一个.tar.gz的文件生成。
是不是要比使用SharpZipLib
简单多了?
发表评论