(精华)2020年9月10日 C#类库 文件压缩帮助类

using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Collections.Generic;
using System.IO;

namespace Core.Util
{
    /// 
    /// 文件压缩帮助类
    /// 
    public class FileZipHelper
    {
        /// 
        /// 压缩一个文件
        /// 
        /// 文件信息
        /// 
        public static byte[] ZipFile(FileEntry file)
        {
            return ZipFile(new List<FileEntry> { file });
        }

        /// 
        /// 压缩多个文件
        /// 
        /// 文件信息列表
        /// 
        public static byte[] ZipFile(List<FileEntry> files)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                using (ZipOutputStream zipStream = new ZipOutputStream(ms))
                {
                    files.ForEach(aFile =>
                    {
                        byte[] fileBytes = aFile.FileBytes;
                        ZipEntry entry = new ZipEntry(aFile.FileName)
                        {
                            DateTime = DateTime.Now,
                            IsUnicodeText = true
                        };
                        zipStream.PutNextEntry(entry);
                        zipStream.Write(fileBytes, 0, fileBytes.Length);
                        zipStream.CloseEntry();
                    });

                    zipStream.IsStreamOwner = false;
                    zipStream.Finish();
                    zipStream.Close();
                    ms.Position = 0;

                    return ms.ToArray();
                }
            }
        }
    }
    /// 
    /// 文件信息
    /// 
    public struct FileEntry
    {
        public FileEntry(string fileName, byte[] fileBytes)
        {
            FileName = fileName;
            FileBytes = fileBytes;
        }

        /// 
        /// 文件名
        /// 
        public string FileName { get; set; }

        /// 
        /// 文件字节
        /// 
        public byte[] FileBytes { get; set; }
    }
}

备注:另一种方式

// 源文件
using var originalFileStream = File.OpenRead("data.txt");
// 目标压缩文件
using var compressedFileStream = File.Create("data.gz");
// 创建压缩流对象
using var compressionStream = new GZipStream(compressedFileStream, 
    CompressionMode.Compress);
// 源文件内容写入压缩流
originalFileStream.CopyTo(compressionStream);

你可能感兴趣的:(#,C#类库/扩展方法)