src/DotNetCommon.Compress/CompressHelper.cs

(开头部分) 14KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using SharpCompress.Archives;
using SharpCompress.Common;
using SharpCompress.Readers;
using System;
using System.IO;
using System.Linq;
using SharpCompress.Archives.GZip;
using SharpCompress.Compressors.BZip2;
using DotNetCommon.Extensions;
using SharpCompress.Archives.Zip;
using System.Collections.Generic;
using System.Text;

namespace DotNetCommon.Compress
{
    /// <summary>
    /// 压缩和解压缩帮助类, 引用SharpZipLib
    /// </summary>
    public class CompressHelper
    {
        #region 压缩文件
        private static void save(ZipArchive archive, Stream outputStream)
        {
            archive.SaveTo(outputStream, new SharpCompress.Writers.WriterOptions(CompressionType.Deflate)
            {
                ArchiveEncoding = new ArchiveEncoding(Encoding.UTF8, Encoding.UTF8),
            });
        }
        /// <summary>
        /// 从流中压缩到流,示例:
        /// <code>
        /// CompressHelper.CompressZip(destStream, new Dictionary&lt;string, Stream>
        /// {
        ///     {"中文B222.txt",stream1 },
        ///     {"testfolder/testsubfolder-suba222.txt",stream2 },
        ///     {"testfolder-a.txt",stream3 }
        /// });
        /// </code>
        /// </summary>
        public static void CompressZip(Stream outputStream, Dictionary<string, Stream> dic)
        {
            Ensure.NotNull(outputStream, nameof(outputStream));
            Ensure.NotNullOrEmpty(dic);

            using (var archive = ZipArchive.Create())
            {
                foreach (var item in dic) archive.AddEntry(item.Key, item.Value);
                save(archive, outputStream);
            }
        }

        /// <summary>
        /// 将指定多个文件压缩到一个文件,示例:
        /// <code>
        /// CompressHelper.CompressZip(destFilePath, new Dictionary&lt;string, string>
        /// {
        /// 	{"中文B222.txt","c:/testfolder/中文B.txt" },
        /// 	{"testsubfolder/suba222.txt","c:/testfolder/testsubfolder/testsubfolder-suba.txt" },
        /// 	{"testfolder-a.txt","c:/testfolder/testfolder-a.txt" }
        /// });
后面还有 268 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。