ICSharpCode.SharpZipLib C# 压缩文件夹SharpZipHelper

sharpZip自带简单的方式:

 

 public static void CompressDirectory(string inputDirectory, string outputFile)

        {
            var fast = new FastZip();
            fast.CreateEmptyDirectories = true;
            fast.CreateZip(outputFile, inputDirectory, true, string.Empty);
        }


        public static void DecompressDirectory(string inputFile, string outputDirectory)
        {
            var fast = new FastZip();
            fast.CreateEmptyDirectories = true;
            fast.ExtractZip(inputFile, outputDirectory, string.Empty);
        }

 

自定义的方式:

  public static void UnZipFile(string inputFile, string outputDir)
        {
            if (string.IsNullOrEmpty(outputDir))
            {
                return;
            }

            if (outputDir.Last() != '\\')
            {
                outputDir += "\\";
            }

            using (var s = new ZipInputStream(File.OpenRead(inputFile)))
            {
                ZipEntry theEntry;
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    var directoryName = Path.GetDirectoryName(theEntry.Name);
                    var fileName = Path.GetFileName(theEntry.Name);

                    if (!string.IsNullOrEmpty(directoryName))
                    {
                        Directory.CreateDirectory(outputDir + directoryName);
                    }

                    if (fileName != string.Empty)
                    {
                        using (var streamWriter = File.Create(outputDir + theEntry.Name))
                        {
                            var size = 0;
                            var data = new byte[20480];
                            while (true)
                            {
                                size = s.Read(data, 0, data.Length);
                                if (size > 0)
                                {
                                    streamWriter.Write(data, 0, size);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }


        public static void ZipFolder(string inputFolder, string outputZipFile)
        {
            using (var s = new ZipOutputStream(File.Create(outputZipFile)))
            {
                s.SetLevel(6);

                Compress(inputFolder, inputFolder, s);

                s.Finish();
                s.Close();
            }
        }

        private static void Compress(string dirPath, string originalDir, ZipOutputStream s)
        {
            var fileNames = Directory.GetFiles(dirPath);
            var folders = Directory.GetDirectories(dirPath);
            var buffer = new byte[40960];
            foreach (var file in fileNames)
            {
                var entryDir = dirPath.Replace(originalDir, "").TrimStart('\\');
                var entry = new ZipEntry(entryDir + Path.GetFileName(file));
                entry.DateTime = DateTime.Now;
                s.PutNextEntry(entry);
                using (var fs = File.OpenRead(file))
                {
                    int sourceBytes;
                    do
                    {
                        sourceBytes = fs.Read(buffer, 0, buffer.Length);
                        s.Write(buffer, 0, sourceBytes);
                    } while (sourceBytes > 0);
                }
            }

            foreach (var folder in folders)
            {
                var entryDir = folder.Replace(originalDir, "").TrimStart('\\');
                if (entryDir.Last()!='\\'&&entryDir.Last()!='/')
                {
                    entryDir += "/";
                }
                var entry = new ZipEntry(entryDir); 
                entry.DateTime = DateTime.Now;
                s.PutNextEntry(entry);
                Compress(folder, originalDir, s);
            }
        }

 

posted @ 2020-11-18 10:43  灰主流  阅读(214)  评论(0编辑  收藏  举报