ZIP——内存压缩多个文件

using ICSharpCode.SharpZipLib.Zip;

namespace MindExportLearning.Util

{
    /// <summary>
    /// 压缩和解压文件
    /// </summary>
    public class ZipUtil
    {
          /// <summary>
        /// 内存压缩多个文件
        /// </summary>
        /// <param name="memoryFiles">文件信息(包括目录和文件内容)</param>
        /// <param name="zipedFileName">压缩路径</param>
        public static void ZipMemoryFiles(Dictionary<string, byte[]> memoryFiles, string zipedFileName)
        {
            using (FileStream zipFile = File.Create(zipedFileName))
            {
                using (var zipStream = new ZipOutputStream(zipFile))
                {
                    foreach (var memoryFile in memoryFiles)
                    {
                        //文件
                        var entry = new ZipEntry(memoryFile.Key);
                        zipStream.PutNextEntry(entry);
                        zipStream.Write(memoryFile.Value, 0, memoryFile.Value.Length);
                    }
                }
                zipFile.Close();
            }
        }
调用实例:

var memoryFiles = new Dictionary<string, byte[]>
            {
                {"content.xml", FileHelper.XmlToBytes(GetContent(source))},
                {"meta.xml", FileHelper.XmlToBytes(GetMeta())},
                {"Revisions\\746128402a05\\revisions.xml", FileHelper.XmlToBytes(GetRevision(source))},
                {"Revisions\\746128402a05\\rev-1-1502240545.xml", FileHelper.XmlToBytes(GetRev(source))},
                { "META-INF\\manifest.xml", FileHelper.XmlToBytes(GetManifest(source))}
        };
            ZipUtil.ZipMemoryFiles(memoryFiles, zipPath);
filehelper 文件帮助类:

  /// <summary>
    /// 读写文件帮助类
    /// </summary>
    public class FileHelper
    {
        /// <summary>
        /// 写入文件JSON字符串
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="value">文件内容</param>
        public static void WriteJson(string path, string value)
        {
            using (var fs = new FileStream(path, FileMode.Append))
            {
                var sw = new StreamWriter(fs);
                sw.Write(value);
                sw.Close();
            }
        }
        /// <summary>
        /// 写入文件对象
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="value">对象数据类型</param>
        public static void WriteJson(string path, object value)
        {
            var json = JsonConvert.SerializeObject(value);
            WriteJson(path, json);
        }
        /// <summary>
        /// 创建文件夹
        /// </summary>
        /// <param name="filePath"></param>
        public static void CreateFolder(string filePath)
        {
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
        }
        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="filePath">要删除的文件路径</param>
        public static void DeleteFile(string filePath)
        {
            if (!string.IsNullOrEmpty(filePath)&& File.Exists(filePath))
                File.Delete(filePath);
        }

        /// <summary>
        /// 删除文件夹
        /// </summary>
        /// <param name="folderPath">要删除的非空目录</param>
        public static void DeleteFolder(string folderPath)
        {
            if (!string.IsNullOrEmpty(folderPath)&& Directory.Exists(folderPath))
            {

                var di = new DirectoryInfo(folderPath);
                //true表示删除里面所有文件包括文件夹和子文件夹
                di.Delete(true);
            }
        }
      
        /// <summary>   
        /// 重命名文件夹内的所有子文件夹   
        /// </summary>   
        /// <param name="directoryName">文件夹名称</param>   
        /// <param name="newDirectoryName">新子文件夹名称格式字符串</param>   
        public void RenameDirectories(string directoryName, string newDirectoryName)
        {
            int i = 1;
            string[] sDirectories = Directory.GetDirectories(directoryName);
            foreach (string sDirectory in sDirectories)
            {
                string sNewDirectoryName = string.Format(newDirectoryName, i++);
                string sNewDirectory = Path.Combine(directoryName, sNewDirectoryName);
                Directory.Move(sDirectory, sNewDirectory);
            }
        }
        public static MemoryStream XmlToStream(XmlDocument xml)
        {
            var stream = new MemoryStream();
            xml.Save(stream);
            return stream;
        }

        public static byte[] StreamToBytes(MemoryStream stream)
        {
            return stream.ToArray();
        }

        public static byte[] XmlToBytes(XmlDocument xml)
        {
            var stream = XmlToStream(xml);
            return StreamToBytes(stream);
        }
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值