zoukankan      html  css  js  c++  java
  • 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);
                }
            }
  • 相关阅读:
    Newtonsoft.Json 处理多态类型的反序列化
    33条C#和.NET经典面试题目及答案
    转:原码,反码,补码详解
    使用OpenXML操作Office文档
    WPF的Binding学习笔记(二)
    WPF的Binding学习笔记(一)
    M6: 使用摄像头(CameraCaptureUI)
    M5: 使用StorageFile
    NYOJ144_小珂的苦恼_C++
    搜索水题四连发_C++
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/13998520.html
Copyright © 2011-2022 走看看