C#多文件夹压缩

说明:依赖于ICSharpCode.SharpZipLib.dll 

1、直接上代码了(仅作参考)

        /// <summary>
        /// 调用压缩文件
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            string[] FileProperties = new string[4];
            FileProperties[0] = "G:\\dishui\\Css";//待压缩文件目录1
            FileProperties[1] = "G:\\dishui\\image";  //待压缩文件目录2
            FileProperties[2] = "G:\\dishui\\Js";  //待压缩文件目录3
            FileProperties[3] = "G:\\dishui\\ddsss";  //不存在的目录
            ZipFile(FileProperties, "G:\\zzz.zip");   //输出目录
            return View();
        }
        /// <summary>
        /// 压缩文件夹
        /// </summary>
        /// <param name="strFile">文件夹数组</param>
        /// <param name="strZip">输出路径</param>
        private static void ZipFile(string[] strFile, string strZip)
        {
            ZipOutputStream s = new ZipOutputStream(System.IO.File.Create(strZip));
            s.SetLevel(6);
            for (int i=0,j=strFile.Length;i<j;i++) {
                string item = strFile[i];
                if (!Directory.Exists(item))
                {
                    continue;
                }
                zip(item, s, item);
            }
            s.Finish();
            s.Close();
        }

        private static void zip(string strFile, ZipOutputStream s, string staticFile)
        {
            Crc32 crc = new Crc32();
            string[] filenames = Directory.GetFileSystemEntries(strFile);
            foreach (string file in filenames)
            {

                if (Directory.Exists(file))
                {
                    zip(file, s, staticFile);
                }

                else // 否则直接压缩文件
                {
                    //打开压缩文件
                    FileStream fs = System.IO.File.OpenRead(file);

                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
                    ZipEntry entry = new ZipEntry(tempfile);

                    entry.DateTime = DateTime.Now;
                    entry.Size = fs.Length;
                    fs.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    s.PutNextEntry(entry);

                    s.Write(buffer, 0, buffer.Length);
                }
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_26900081/article/details/78823600