using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using Ionic.Zip;
using ZipFile = Ionic.Zip.ZipFile; namespace WebApplication5.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
} private string zipFile = $@"e:\压缩文件全部下载测试_{DateTime.Now.ToString("yyyyMMdd")}.rar"; private string[] files = new[]
{
"F:/BQ/xx/-2ed47457e8d3d0a0.jpg",
"F:/BQ/战无不胜表情包/............. - 副本.bmp",
"E:/------/1.柱状图的用法/HighCharts柱状图的使用.png",
}; #region 第一种 /// <summary>
/// 第三方 Ionic.Zip(NuGet 搜索安装)
/// </summary>
/// <returns></returns>
public string DownZip1()
{
string res = string.Empty; //判断是否存在
if (IsExist(zipFile))
{
//增量压缩
using (ZipFile zip = new ZipFile(zipFile, Encoding.Default))
{
foreach (var item in zip.Entries)
{
res += item.FileName+',';
} zip.UpdateFiles(files, "");
zip.Save();
} //删除文件
// DeleteFile(zipFile); //下载文件
// Download1(zipFile.Replace(@"e:\", ""), zipFile);
// Download2(zipFile.Replace(@"e:\", ""), zipFile);
}
else
{
//设置路径和编码.设置编码为了防止 中文文件名乱码
using (ZipFile zip = new ZipFile(zipFile, Encoding.Default))
{
//zip.Password = "123456"; //加密
zip.AddFiles(files, "");//添加文件
zip.Save();
} res += $"共压缩{files.Count()}个文件\n";
res += string.Join(Environment.NewLine, files.ToArray());
res += Environment.NewLine; //删除压缩包中的某个文件
//DeleteFileInZip(zipFile, "-2ed47457e8d3d0a0.jpg");
}
return res;
} #endregion 第一种 #region 第二种 /// <summary>
/// 微软的(在添加引用中搜索)
/// 1.system.IO.Compression
/// 2.system.IO.Compression.FileSystem
/// </summary>
/// <returns></returns>
public string DownZip2()
{
string res = string.Empty;
try
{
//压缩
using (ZipArchive archive = new ZipArchive(new FileStream(zipFile, FileMode.OpenOrCreate), ZipArchiveMode.Create))//Create,Read,Update
{
string path = string.Empty;
string filename = string.Empty; for (int i = 0; i < files.Length; i++)
{
path = files[i];
ZipArchiveEntry readMeEntry = archive.CreateEntry(Path.GetFileName(path));
using (System.IO.Stream stream = readMeEntry.Open())
{
byte[] bytes = System.IO.File.ReadAllBytes(path);
stream.Write(bytes, 0, bytes.Length);
}
}
} //读取文件
using (ZipArchive archive = new ZipArchive(new FileStream(zipFile, FileMode.OpenOrCreate), ZipArchiveMode.Read))
{
int i = 1;
foreach (var zipArchiveEntry in archive.Entries)
{
res += i + ":" + zipArchiveEntry.FullName + ", ";
i++;
}
}
}
catch (Exception e)
{
throw e;
} return res;
} #endregion 第二种 #region DownHelper /// <summary>
/// 删除一个文件
/// </summary>
/// <param name="filePath"></param>
public void DeleteFile(string filePath)
{
System.IO.File.Delete(filePath);
} /// <summary>
/// 从zip文件中删除一个文件,注意无法直接删除一个文件夹
/// </summary>
/// <param name="zipFilePath">zip路径 eg:E:\\yangfeizai\\test.zip</param>
/// <param name="deleteFileName">要删除文件的名称(无法直接删除文件夹) eg:Jayzai.xml</param>
public void DeleteFileInZip(string zipFilePath, string deleteFileName)
{
using (ZipFile zip = ZipFile.Read(zipFilePath))
{
//zip["Jayzai.xml"] = null; zip.RemoveEntry(deleteFileName);
zip.Save();
}
} /// <summary>
/// 检查文件是否存在
/// </summary>
/// <returns></returns>
public bool IsExist(string filePath)
{
if (System.IO.File.Exists(filePath))
{
return true;
}
else
{
return false;
}
} /// <summary>
/// 下载文件1
/// </summary>
/// <param name="fileName"></param>
/// <param name="filePath"></param>
public void Download1(string fileName, string filePath)
{
//string fileName = "aaa.txt";//客户端保存的文件名
//string filePath = Server.MapPath("~/Document/123.txt");//路径
FileInfo fileinfo = new FileInfo(filePath);
Response.Clear(); //清除缓冲区流中的所有内容输出
Response.ClearContent(); //清除缓冲区流中的所有内容输出
Response.ClearHeaders(); //清除缓冲区流中的所有头
Response.Buffer = true; //该值指示是否缓冲输出,并在完成处理整个响应之后将其发送
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileinfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/unknow"; //获取或设置输出流的 HTTP MIME 类型
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); //获取或设置输出流的 HTTP 字符集
Response.TransmitFile(filePath);
Response.End();
} /// <summary>
/// 下载文件2
/// </summary>
/// <param name="fileName"></param>
/// <param name="filePath"></param>
public void Download2(string fileName, string filePath)
{
//string fileName = "aaa.txt";//客户端保存的文件名
//string filePath = Server.MapPath("~/Document/123.txt");//路径 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize]; Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
} #endregion DownHelper #region 解压 //// 从 zip 文件中解压出一个文件
//public void ExeSingleDeComp(string fileName)
//{
// using (ZipFile zip = ZipFile.Read(fileName))
// {
// // zip.Password = "123456";// 密码解压
// //Extract 解压 zip 文件包的方法,参数是保存解压后文件的路基
// zip["Jayzai.xml"].Extract(@"c:\\");
// }
// //// 从 zip 文件中解压全部文件
//public void ExeAllDeComp(string fileName)
//{
// using (ZipFile zip = ZipFile.Read(fileName))
// {
// //zip.Password = "123456";// 密码解压
// foreach (ZipEntry entry in zip)
// {
// //Extract 解压 zip 文件包的方法,参数是保存解压后文件的路基
// entry.Extract(@"c:\\");
// }
// }
//} #endregion
}
}

.Net类库 压缩文件 与 Ionic.Zip 批量压缩不同目录文件与解压 文件的更多相关文章

  1. 将ZIP文件添加到程序集资源文件然后在运行时解压文件

    今天做安装打包程序研究,之前同事将很多零散的文件发布成一个安装文件夹给用户,这样体验不好,我希望将所有文件打包成一个.net程序,运行此程序的时候自解压然后执行后续的安装步骤. 解决过程: 1,将所有 ...

  2. 对于使用secureFX上传文件到centos7 的时候,以及不同的用户解压文件,对于文件操作权限的实验

    本以为以一个用户胡如root登录了SecureFx,之后选择了root的家目录下的一个software目录,之后上传 以root用户远程登录LINUX系统 查看文件 之后再验证普通用户zhaijh登录 ...

  3. mac通过自带的ssh连接Linux服务器并上传解压文件

    需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: ...

  4. java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)

    // java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...

  5. Unity3D研究院之LZMA压缩文件与解压文件

    原地址:http://www.xuanyusong.com/archives/3095 前两天有朋友告诉我Unity的Assetbundle是LZMA压缩的,刚好今天有时间那么就研究研究LZMA.它是 ...

  6. 【转载】.NET压缩/解压文件/夹组件

    转自:http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html 阅读目录 1.前言 2.关于压缩格式和算法的基础 3.几种常见的.N ...

  7. C#工具类:使用SharpZipLib进行压缩、解压文件

    SharpZipLib是一个开源的C#压缩解压库,应用非常广泛.就像用ADO.NET操作数据库要打开连接.执行命令.关闭连接等多个步骤一样,用SharpZipLib进行压缩和解压也需要多个步骤.Sha ...

  8. 基于Python——实现解压文件夹中的.zip文件

    [背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...

  9. 通过SharpZipLib来压缩解压文件

    在项目开发中,一些比较常用的功能就是压缩解压文件了,其实类似的方法有许多 ,现将通过第三方类库SharpZipLib来压缩解压文件的方法介绍如下,主要目的是方便以后自己阅读,当然可以帮到有需要的朋友更 ...

随机推荐

  1. 海量数据处理的 Top K 相关问题

    Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对 ...

  2. Source Insight用法

    快捷键 Symbol: Browse Project Symbols-:F7, Alt+G Relation View Relationship->For Functions->Pefer ...

  3. IntelliJ IDEA.2017.3.4(win7 64位)的安装使用

    下载 1.Idea与Webstorm同为JetBrains公司的产品,因此安装使用方式也极为相似,首先我们打开IDEA的官方下载网站:https://www.jetbrains.com/idea/,点 ...

  4. Python3 实例

    一直以来,总想写些什么,但不知从何处落笔. 今儿个仓促,也不知道怎么写,就把手里练习过的例子,整理了一下. 希望对初学者有用,都是非常基础的例子,很适合初练. 好了,Follow me. 一.Pyth ...

  5. NLP使用pytorch框架,pytorch安装

    pytorch的安装方法及出现问题的解决方案: 安装pytorch,使用pip 安装,在运行代码的时候会报错,但是导包的时候不会报错,因此要采用conda的方式安装   1.找到miniconda的网 ...

  6. Python标准库3.4.3-random

    9.6. random — Generate pseudo-random numbers Source code: Lib/random.py  翻译:Z.F. This module impleme ...

  7. Flink原理(一)——基础架构

    Flink系列博客,基于Flink1.6,打算分为三部分:原理.源码.实例以及API使用分析,后期等系列博客完成后再弄一个目录. 该系列博客是我自己学习过程中的一些理解,若有不正确.不准确的地方欢迎大 ...

  8. 【转载】Redis 4.0 自动内存碎片整理(Active Defrag)源码分析

    click原文链接原文链接:https://blog.csdn.net/zouhuajianclever/article/details/90669409阅读本文前建议先阅读此篇博客: Redis源码 ...

  9. centos 安装ELK

    准备安装环境 由于本人的centos是通过虚拟机来进行安装的,为了本地电脑能够访问centos系统中的端口,则需要把防火墙进行关闭,通过以下方式进行关闭防火墙. # vi /etc/sysconfig ...

  10. P1091 合唱队形[单调性+DP]

    题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高 ...