分卷压缩 C#代码实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ionic.Zip;
using System.IO;

namespace IFCA.BL.CM
{
    ///

 
    /// Zip压缩文件辅助类(封装Ionic.Zip) 
    ///
 
    public static class FileCompressZipHelper
    {     
        ///  
        /// 压缩指定文件或目录 
        ///
 
        /// 要进行压缩的文件或目录名称 
        /// 生成的压缩文件名 
        public static string Compress(string fileOrDirectoryName)
        {
            string zipPath = _GetZipPath(fileOrDirectoryName);
            Compress(fileOrDirectoryName, zipPath);
            return zipPath;
        }

        ///

 
        /// 压缩指定文件或目录 
        ///
 
        /// 要进行压缩的文件或目录名称 
        /// 生成的压缩文件路径 
        public static void Compress(string fileOrDirectoryName, string zipPath)
        {
            using (ZipFile zip = new ZipFile(Encoding.GetEncoding("utf-8")))
            {
                zip.AddItem(fileOrDirectoryName, "");
                zip.Save(zipPath);
            }
        }

        ///

 
        /// 分卷压缩指定文件或目录 
        ///
 
        /// 要进行压缩的文件或目录名称 
        /// 分卷大小(MB) 
        public static void Compress(string fileOrDirectoryName, int segmentSize)
        {
            string zipPath = _GetZipPath(fileOrDirectoryName);
            Compress(fileOrDirectoryName, zipPath, ZipDataUnit.MB, segmentSize);
        }

        ///

 
        /// 分卷压缩指定文件或目录 
        ///
 
        /// 要进行压缩的文件或目录名称 
        /// 生成的压缩文件路径 
        /// 分卷数据单位 
        /// 分卷大小 
        public static void Compress(string fileOrDirectoryName, string zipPath, ZipDataUnit dataUnit, int segmentSize)
        {
            using (ZipFile zip = new ZipFile(Encoding.GetEncoding("utf-8")))
            {
                zip.MaxOutputSegmentSize = (int)dataUnit * segmentSize;
                zip.AddItem(fileOrDirectoryName, "");
                zip.Save(zipPath);
            }
        }
        ///
        /// 获取对应的文件
        ///

        /// 路径
        ///
        private static string _GetZipPath(string path)
        {
            string directory = Path.GetDirectoryName(path);
            if (string.IsNullOrWhiteSpace(directory)) directory = Path.GetPathRoot(path);
            string fileName = Path.GetFileName(path);
            string zipFileName = null;
            //文件路径 
            if (!string.IsNullOrWhiteSpace(fileName))
            {
                zipFileName = Path.ChangeExtension(fileName, ".zip");
            }
            else
            {
                zipFileName = directory.Split('\\').Last();
                if (string.IsNullOrEmpty(zipFileName))
                {
                    zipFileName = "未命名";
                }
                else
                {
                    directory = directory.Replace(zipFileName, "");
                }
                zipFileName = ".zip";
            }

            return Path.Combine(directory, zipFileName);
        }
    }
    ///

 
    /// 分卷数据单位 
    ///
 
    public enum ZipDataUnit
    {
        ///  
        /// 1024字节 
        ///
 
        KB = 1024,

        ///

 
        /// 1024 * 1024字节 
        ///
 
        MB = 1024 * 1024,

        ///

 
        /// 1024 * 1024 * 1024字节 
        ///
 
        GB = 1024 * 1024 * 1024
    }
}
 

------》调用示例

  #region 示例
        using (DataAccessAdapter adpter = new DataAccessAdapter())
        {
            LinqMetaData linq = new LinqMetaData(adp);
            var Documentpath = linq.CfDocument.Where(c => c.Documentid == 3087).Select(c => c.Documentpath).FirstOrDefault().ToStr();//示例 获取对应的文件
            var UNC_PATH = System.Configuration.ConfigurationManager.AppSettings["UNC_Path"];
            var fileOrDirectoryName = System.IO.Path.Combine(UNC_PATH, Documentpath);
            IFCA.BL.CM.FileCompressZipHelper.Compress(fileOrDirectoryName, 2);//分卷压缩     【默认压缩到 被压缩的目录】
            //var zipPath= System.IO.Path.Combine("C:\\temp\\", "分卷压缩"+ ".zip");
            //IFCA.BL.CM.FileCompressZipHelper.Compress(fileOrDirectoryName,zipPath, IFCA.BL.CM.ZipDataUnit.MB,5);//分卷压缩 【可以指定压缩目录、名称】
        }
        #endregion

你可能感兴趣的:(分卷压缩 C#代码实现)