1.前言
最近做一个功能需要用到对压缩文件的解压,就找到了这个SharpCompress不错,还能解压rar的文件。但是网上的资料和我拿到的SharpCompress.dll的方法有些出入,所以我就自己摸索了一下搞出来了,代码比较简单希望可以给大家带来帮助。
2.文件夹压缩
文件夹的压缩的话需要遍历文件夹下的所有的文件夹里的文件然后进行压缩,这里用了递归来获取文件夹下的所有的文件。具体代码如下:
/// <summary> /// 压缩文件夹 /// </summary> /// <param name="targetFile">压缩文件夹路径</param> /// <param name="zipFile">压缩后路径</param> public void Zips(string targetFile,string zipFile) { using (var archive = ZipArchive.Create()) { ZipRecursion(targetFile, archive); FileStream fs_scratchPath = new FileStream(zipFile, FileMode.OpenOrCreate, FileAccess.Write); archive.SaveTo(fs_scratchPath, CompressionType.Deflate); fs_scratchPath.Close(); } } /// <summary> /// 压缩递归 /// </summary> /// <param name="fullName">压缩文件夹目录</param> /// <param name="archive">压缩实体</param> public void ZipRecursion(string fullName,ZipArchive archive) { DirectoryInfo di = new DirectoryInfo(fullName);//获取需要压缩的文件夹信息 foreach (var fi in di.GetDirectories()) { if (Directory.Exists(fi.FullName)) { ZipRecursion(fi.FullName, archive); } } foreach (var f in di.GetFiles()) { archive.AddEntry(f.FullName, f.OpenRead());//添加文件夹中的文件 } }
3.压缩文件解压
文件夹解压就更加简单了,网上其他的文章解压rar和zip的方式不一样,但是我用的时候可以用一种方法就解压rar和zip的格式,具体如下:
/// <summary> /// 解压文件 /// </summary> /// <param name="targetFile">解压文件路径</param> /// <param name="zipFile">解压文件后路径</param> public static void Decompression(string targetFile, string zipFile) { var archive = ArchiveFactory.Open(targetFile); foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { entry.WriteToDirectory(zipFile, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite); } } }
4.资源