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.資源