C# ZIP 目录文件压缩

来源:互联网 发布:天刀男捏脸数据白玉京 编辑:程序博客网 时间:2024/05/18 01:05

1.项目导入sharpziplib.dll

 

 

using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;

 

 

 

 

#region 压缩目录文件

        public static string CompressDirectory(string directory, string outputFileName)
        {
           return CompressDirectory(directory, outputFileName, null);
        }

        public static string CompressDirectory(string directory, string outputFileName, string password)
        {
            ArrayList fileList = PopulateFileList(directory);
            int parentDirectoryNameLength = (Directory.GetParent(directory)).ToString().Length;

            //remove   the   last'/'
            parentDirectoryNameLength += 1;

            byte[] buffer;
            string outPath = directory + @"/" + outputFileName;
            FileStream fileStream = null;
            //   create   zip   stream
            using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(outPath)))
            {
                try
                {
                    if (!string.IsNullOrEmpty(password))
                    {
                        zipStream.Password = password;
                    }

                    zipStream.SetLevel(6);   //   compress   level   0---9

                    ZipEntry zipEntity = null;
                   
                    foreach (string fileName in fileList)
                    {
                        zipEntity = new ZipEntry(fileName.Remove(0, parentDirectoryNameLength));
                        zipStream.PutNextEntry(zipEntity);

                        //it   is   really   a   file
                        if (!fileName.EndsWith(@"/"))
                        {
                            fileStream = File.OpenRead(fileName);
                            buffer = new byte[fileStream.Length];
                            fileStream.Read(buffer, 0, buffer.Length);
                            zipStream.Write(buffer, 0, buffer.Length);
                        }
                    }
                   
                }
                catch (Exception)
                {

                }
                finally
                {
                    fileStream.Close();
                    fileStream.Dispose();
                    zipStream.Finish();
                    zipStream.Close();
                    zipStream.Dispose();
                }
              

            }
            return outPath;
        }

        private static ArrayList PopulateFileList(string directory)
        {
            ArrayList filesList = new ArrayList();
            bool isEmpty = true;
            foreach (string file in Directory.GetFiles(directory))   //   add   each   file   in   directory
            {
                filesList.Add(file);
                isEmpty = false;
            }

            //   all   subcategory   was   added
            if (isEmpty)
            {
                if (Directory.GetDirectories(directory).Length == 0)
                {
                    filesList.Add(directory + @"/");
                }
            }

            //   recursive
            foreach (string dirs in Directory.GetDirectories(directory))
            {
                foreach (object obj in PopulateFileList(dirs))
                {
                    filesList.Add(obj);
                }
            }
            return filesList;
        }
        #endregion

 

原创粉丝点击