二开文件压缩

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

二开文件压缩

using ICSharpCode.SharpZipLib.Checksums;

using ICSharpCode.SharpZipLib.Zip;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;


namespace WLQDDR.BusinessPlugIn

{

  public  class ZipHelper

    {

        /// <summary>

        /// ZIP:压缩文件夹

        /// add yuangang by 2016-06-13

        /// </summary>

        /// <param name="DirectoryToZip">需要压缩的文件夹(绝对路径)</param>

        /// <param name="ZipedPath">压缩后的文件路径(绝对路径)</param>

        /// <param name="ZipedFileName">压缩后的文件名称(文件名,默认 同源文件夹同名)</param>

        /// <param name="IsEncrypt">是否加密(默认 加密)</param>

        public static void ZipDirectory(string DirectoryToZip, string ZipedPath, string ZipedFileName = "", bool IsEncrypt = true)

        {

            //如果目录不存在,则报错

            if (!System.IO.Directory.Exists(DirectoryToZip))

            {

                throw new System.IO.FileNotFoundException("指定的目录: " + DirectoryToZip + " 不存在!");

            }


            //文件名称(默认同源文件名称相同)

            string ZipFileName = string.IsNullOrEmpty(ZipedFileName) ? ZipedPath + "\\" + new DirectoryInfo(DirectoryToZip).Name + ".zip" : ZipedPath + "\\" + ZipedFileName + ".zip";


            using (System.IO.FileStream ZipFile = System.IO.File.Create(ZipFileName))

            {

                using (ZipOutputStream s = new ZipOutputStream(ZipFile))

                {

                    if (IsEncrypt)

                    {

                        //压缩文件加密

                        s.Password = "123";

                    }

                    ZipSetp(DirectoryToZip, s, "");

                }

            }

        }

        /// <summary>

        /// 递归遍历目录

        /// add yuangang by 2016-06-13

        /// </summary>

        private static void ZipSetp(string strDirectory, ZipOutputStream s, string parentPath)

        {

            if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar)

            {

                strDirectory += Path.DirectorySeparatorChar;

            }

            Crc32 crc = new Crc32();


            string[] filenames = Directory.GetFileSystemEntries(strDirectory);


            foreach (string file in filenames)// 遍历所有的文件和目录

            {


                if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

                {

                    string pPath = parentPath;

                    pPath += file.Substring(file.LastIndexOf("\\") + 1);

                    pPath += "\\";

                    ZipSetp(file, s, pPath);

                }


                else // 否则直接压缩文件

                {

                    //打开压缩文件

                    using (FileStream fs = File.OpenRead(file))

                    {


                        byte[] buffer = new byte[fs.Length];

                        fs.Read(buffer, 0, buffer.Length);


                        string fileName = parentPath + file.Substring(file.LastIndexOf("\\") + 1);

                        ZipEntry entry = new ZipEntry(fileName);


                        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);

                    }

                }

            }

        }

    }

}



请教一下,压缩完后解压提示头文件已损坏是什么原因导致的呢

二开文件压缩

using ICSharpCode.SharpZipLib.Checksums;using ICSharpCode.SharpZipLib.Zip;using System;using System.Collections.Generic;using...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息