c# 压缩文件夹为zip包
程序员文章站
2022-06-15 17:43:28
C#文件或文件夹压缩方法有很多,本文通过使用ICSharpCode.SharpZipLib.dll来进行压缩,解压也可以但是本文暂不涉及...
如果没有引用ICSharpCode.SharpZipLib包,可以通过工具-nuget包管理器-管理nuget包搜素,然后安装引用
下面直接上代码,为压缩zip代码
/// 压缩成zip /// </summary> /// <param name="filesPath">d:\</param> /// <param name="zipFilePath">d:\a.zip</param> public static void CreateZipFile(string folderToZip, string zipedFile) { bool result = false; if (!Directory.Exists(folderToZip)) return ; ZipOutputStream zipStream = new ZipOutputStream(File.Create(zipedFile)); zipStream.SetLevel(6); //if (!string.IsNullOrEmpty(password)) zipStream.Password = password; result = ZipDirectory(folderToZip, zipStream, ""); zipStream.Finish(); zipStream.Close(); return ; } /// <summary> /// 递归压缩文件夹的内部方法 /// </summary> /// <param name="folderToZip">要压缩的文件夹路径</param> /// <param name="zipStream">压缩输出流</param> /// <param name="parentFolderName">此文件夹的上级文件夹</param> /// <returns></returns> private static bool ZipDirectory(string folderToZip, ZipOutputStream zipStream, string parentFolderName) { bool result = true; string[] folders, files; ZipEntry ent = null; FileStream fs = null; //Crc32 crc = new Crc32(); try { ent = new ZipEntry(Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/")); zipStream.PutNextEntry(ent); zipStream.Flush(); files = Directory.GetFiles(folderToZip); foreach (string file in files) { fs = File.OpenRead(file); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); ent = new ZipEntry(Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/" + Path.GetFileName(file))); ent.DateTime = DateTime.Now; ent.Size = fs.Length; fs.Close(); //crc.Reset(); //crc.Update(buffer); //ent.Crc = crc.Value; zipStream.PutNextEntry(ent); zipStream.Write(buffer, 0, buffer.Length); } } catch { result = false; } finally { if (fs != null) { fs.Close(); fs.Dispose(); } if (ent != null) { ent = null; } GC.Collect(); GC.Collect(1); } folders = Directory.GetDirectories(folderToZip); foreach (string folder in folders) if (!ZipDirectory(folder, zipStream, Path.GetFileName(folderToZip))) return false; return result; }