广告
返回顶部
首页 > 资讯 > 精选 >C#如何实现多文件打包压缩
  • 341
分享到

C#如何实现多文件打包压缩

2023-06-22 04:06:36 341人浏览 安东尼
摘要

C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpcode.S

C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpcode.SharpZipLib 最符合项目的要求。

具体实现如下:

1.在 Nuget 中安装ICSharpCode.SharpZipLib

C#如何实现多文件打包压缩

2.将要打包的文件放到同个文件夹进行压缩:

①压缩文件夹

/// <summary>        /// 压缩文件        /// </summary>        /// <param name="fileName">压缩后获得的文件名</param>        public static bool CompressFile(string dir, out string fileName)        {            string dest = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "\\" + string.FORMat("{0:yyyyMMddHHmmss}", DateTime.Now) + ".zip";   //默认压缩在桌面上            if (!Directory.Exists(Path.GetDirectoryName(dest)))   //文件不存在就根据路径创建  E:\\test                Directory.CreateDirectory(Path.GetDirectoryName(dest));            using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(dest)))            {                zipStream.SetLevel(6);   //压缩级别0-9                CreateZip(dir, zipStream);                fileName = dest;                zipStream.Finish();                zipStream.Close();            }            return true;        }        /// <summary>        /// 压缩内容到 zipStream 流中        /// </summary>        /// <param name="source">源文件</param>        /// <param name="zipStream">目标文件流(全路径+文件名+.zip)</param>        private static void CreateZip(string source, ZipOutputStream zipStream)        {            Crc32 crc = new Crc32();            string[] files = Directory.GetFileSystemEntries(source);  //获得所有文件名称和目录名称            foreach (var file in files)            {                if (Directory.Exists(file))    //如果是文件夹里有文件则递归                {                    CreateZip(file, zipStream);                }                else    //如果不是则压缩                {                    using (FileStream fs = File.OpenRead(file))                    {                        byte[] buffer = new byte[fs.Length];                        fs.Read(buffer, 0, buffer.Length);                        string tempFileName = file.Substring(file.LastIndexOf("\\") + 1);  //获得当前文件路径的文件名                        ZipEntry entry = new ZipEntry(tempFileName);                        entry.DateTime = DateTime.Now;                        entry.Size = fs.Length;                        fs.Close();                        crc.Reset();                        crc.Update(buffer);                        entry.Crc = crc.Value;                        zipStream.PutNextEntry(entry);                        zipStream.Write(buffer, 0, buffer.Length);                    }                }            }        }

②将指定文件打包压缩 (可打包线上文件)

/// <summary>        /// 打包线上线下文件        /// </summary>        /// <param name="fileList">文件列表</param>        /// <param name="savepath">保存路径</param>        public static void ZipOnlineFile3(List<string> fileList, string savepath)        {            //判断保存的文件目录是否存在            if (!File.Exists(savepath))            {                var file = new FileInfo(savepath);                if (!file.Directory.Exists)                {                    file.Directory.Create();                }            }            Crc32 crc = new Crc32();            using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(savepath)))            {                zipStream.SetLevel(9);   //压缩级别0-9                  foreach (var url in fileList)                {                    byte[] buffer = new WEBClient().DownloadData(url);                    string tempFileName = GetFileNameByUrl(url);  //获得当前文件路径的文件名                    ZipEntry entry = new ZipEntry(tempFileName);                    entry.DateTime = DateTime.Now;                    entry.Size = buffer.Length;                    crc.Reset();                    crc.Update(buffer);                    zipStream.PutNextEntry(entry);                    zipStream.Write(buffer, 0, buffer.Length);                }            }        }

从文件路径读取文件名的方法:

public static string GetFileNameByUrl(string url)        {            //判断路径是否为空            if (string.IsNullOrWhiteSpace(url)) return null;            //判断是否为线上文件            if (url.ToLower().StartsWith("Http"))            {                return url.Substring(url.LastIndexOf("/") + 1);            }            else            {                return url.Substring(url.LastIndexOf("\\") + 1);            }        }

通过此方法生成的压缩包,所有文件都会显示在同一层。

③如果需要在文件中创建目录,需要在文件名称上指定文件路径

添加工具类:

/// <summary>    /// 文件对象    /// </summary>    public class FileItem    {        /// <summary>        /// 文件名称        /// </summary>        public string FileName { get; set; }        /// <summary>        /// 文件路径        /// </summary>        public string FileUrl { get; set; }    }

压缩文件的方法:

/// <summary>        /// 打包线上线下文件        /// </summary>        /// <param name="zipName">压缩文件名称</param>        /// <param name="fileList">文件列表</param>        /// <param name="savepath">保存路径</param>        public static string ZipFiles(string zipName, List<FileItem> fileList, out string error)        {            error = string.Empty;            string path = string.Format("/files/zipFiles/{0}/{1}/{2}/", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);            //文件保存目录            string directory = FileSavePath + path;            string url = FileHostUrl.TrimEnd('/') + path + zipName;            string savePath = directory + zipName;            try            {                if (!Directory.Exists(directory))                {                    Directory.CreateDirectory(directory);                }                using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(savePath)))                {                    zipStream.SetLevel(9);   //压缩级别0-9                    foreach (var item in fileList)                    {                        byte[] buffer = new WebClient().DownloadData(item.FileUrl);                        ZipEntry entry = new ZipEntry(item.FileName);                        entry.DateTime = DateTime.Now;                        entry.Size = buffer.Length;                        zipStream.PutNextEntry(entry);                        zipStream.Write(buffer, 0, buffer.Length);                    }                }            }            catch (Exception ex)            {                error = "文件打包失败:" + ex.Message;            }            return url;        }

调用参数示例:

{  "zipName": "test.zip",  "fileList": [    {      "fileName": "123.png",      "fileUrl": "https://file.yidonGCha.cn/files/uploadfiles/image/2021/11/15/11c6de395fcc484faf4745ade62cf6e6.png"    },    {      "fileName": "123/456/789.jpg",      "fileUrl": "https://file.yidongcha.cn/files/uploadfiles/image/2021/11/15/fe922b250acf4344b8ca4d2aad6e0355.jpg"    }  ]}

生成的结果:

C#如何实现多文件打包压缩

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: C#如何实现多文件打包压缩

本文链接: https://www.lsjlt.com/news/302735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#如何实现多文件打包压缩
    C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpCode.S...
    99+
    2023-06-22
  • C#实现多文件打包压缩(.Net Core)
    最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpCode.SharpZipLib 最符合项目的要求。 具体实现如下: 1.在 Nuget 中安装ICSha...
    99+
    2022-11-12
  • .NetCore多文件打包压缩的实现代码
    最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用  ICSharpCode.SharpZipLib 最符合项目的要求。 具体实现如下: 1.在 Nuget 中安装  I...
    99+
    2022-11-12
  • Java实现多文件压缩打包的方法
    本文实例讲述了Java实现多文件压缩打包的方法。分享给大家供大家参考,具体如下:package com.biao.test;import java.io.File;import java.io.FileInputStream;import ...
    99+
    2023-05-31
    java 文件 压缩
  • C#实现多文件压缩与解压功能
    目录实现功能开发环境实现代码实现效果这个功能没什么可介绍的,大家都懂,直接上代码了。。 实现功能 选择多个文件压缩成ZIP文件和解压ZIP文件 开发环境 开发工具: Visual S...
    99+
    2022-11-13
  • 如何用C#实现压缩文件
    目录一、单文件压缩二、多文件压缩三、多文件异步压缩四、压缩文件夹一、单文件压缩 场景,文件可能比较大,需要压缩传输,比如上传和下载 /// <summary> ///...
    99+
    2022-11-12
  • Vue实现文件批量打包压缩下载
    上次做了一个选择多个数据生成多个二维码并下载,当时项目催的紧,就简单写了个循环生成二维码下载,一次性会下载很多文件,特别难整理; 刚好这次项目又遇到类似这种功能,需要一次性批量下载多...
    99+
    2022-11-13
  • Java如何实现文件压缩为zip和解压zip压缩包
    本篇内容介绍了“Java如何实现文件压缩为zip和解压zip压缩包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!压缩成.zip代码如下:pu...
    99+
    2023-07-02
  • .Net Core 多文件打包压缩的实现代码怎么写
    本篇文章给大家分享的是有关.Net Core 多文件打包压缩的实现代码怎么写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近项目需要实现多文件打包的功能,...
    99+
    2023-06-22
  • webpack如何打包压缩js文件和css文件
    这篇文章主要介绍“webpack如何打包压缩js文件和css文件”,在日常操作中,相信很多人在webpack如何打包压缩js文件和css文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”webpack如何打包...
    99+
    2023-07-04
  • Java实现文件压缩为zip和解压zip压缩包
    目录压缩成.zip解压.zip压缩成.zip 代码如下: public static void toZip(String srcDir, OutputStream out) th...
    99+
    2022-11-13
  • vue-cli3中如何打包成zip压缩文件
    目录vue-cli3打包成zip压缩文件如何实现?思考vue-cli3打包优化vue-cli3打包成zip压缩文件 目前在我司,采用前后分离的方式开发,这就会面临一个问题。那就是部署...
    99+
    2022-11-13
    vue-cli3打包 zip压缩文件 vue-cli3打包成zip
  • 手机wps如何压缩文件打包发送
    今天小编给大家分享一下手机wps如何压缩文件打包发送的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1,打开手机上面的文件管理...
    99+
    2023-07-01
  • webpack如何实现拆分、打包、压缩
    这篇文章主要介绍webpack如何实现拆分、打包、压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!步骤1.传统项目中的问题在不依赖任何自动化、模块化工具的项目中,通常我们的代码是这...
    99+
    2022-10-19
  • Android如何实现压缩和解压缩文件
    废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 package com.maidong.utils; import java.io.Buffe...
    99+
    2022-06-06
    压缩 解压 Android
  • 怎么用C#实现压缩文件
    本篇内容主要讲解“怎么用C#实现压缩文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C#实现压缩文件”吧!一、单文件压缩场景,文件可能比较大,需要压缩传输,比如上传和下载/// ...
    99+
    2023-06-20
  • 如何用java给一个文件夹打成压缩包?
    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;...
    99+
    2023-09-05
    java zip
  • Java如何把文件夹打成压缩包并导出
    目录把文件夹打成压缩包并导出1.打压缩包业务类2.调用工具类生成zip文件并导出总结一下获取下载zip文件流把文件夹打成压缩包并导出 1.打压缩包业务类 @Controller pu...
    99+
    2022-11-13
  • java实现文件打包压缩输出到浏览器下载
    文件打包压缩输出到浏览器下载 java批量下载文件打包压缩工具类,输出到浏览器下载,可以自己改名。 一、工具类: 入参 :文件LIst ;打包后的名字 ;响应到浏览器 ...
    99+
    2022-11-12
  • java如何实现不解压直接读取压缩包中文件的
    小编给大家分享一下java如何实现不解压直接读取压缩包中文件的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作