• 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);
                }
            }
  • 相关阅读:
    nc之二:nc命令详解
    memcache redundancy机制分析及思考
    memcache和redis区别
    java操作mongodb
    Memcache缓存与Mongodb数据库的优势和应用
    memcache 存储单个KEY,数据量过大的时候性能慢!以及简单的memcache不适合用到的场景
    pkill详解
    修改linux用户密码
    Mysql函数INSTR、LOCATE、POSITION VS LIKE
    Servlet3.0之九:web模块化
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/13998520.html
Copyright © 2020-2023  润新知