压缩文件的使用
首先引入 dll 文件 ICSharpCode.SharpZipLib.dll 管理 NuGet 包里面下载
压缩文件
- ///
- /// 压缩文件
- ///
- /// 要压缩的所有文件 (完全路径)
- /// 文件名称
- /// 压缩后文件路径
- /// 压缩级别
- public void ZipFileMain(string[] filenames, string[] fileName, string name, int Level)
- {
- ZipOutputStream s = new ZipOutputStream(File.Create(name));
- Crc32 crc = new Crc32();
- // 压缩级别
- s.SetLevel(Level); // 0 - store only to 9 - means best compression
- try
- {
- int m = 0;
- foreach (string file in filenames)
- {
- // 打开压缩文件
- FileStream fs = File.OpenRead(file);// 文件地址
- byte[] buffer = new byte[fs.Length];
- fs.Read(buffer, 0, buffer.Length);
- // 建立压缩实体
- ZipEntry entry = new ZipEntry(fileName[m].ToString());// 原文件名
- // 时间
- entry.DateTime = DateTime.Now;
- // 空间大小
- entry.Size = fs.Length;
- fs.Close();
- crc.Reset();
- crc.Update(buffer);
- entry.Crc = crc.Value;
- s.PutNextEntry(entry);
- s.Write(buffer, 0, buffer.Length);
- m++;
- }
- }
- catch
- {
- throw;
- }
- finally
- {
- s.Finish();
- s.Close();
- }
- }
文件下载
- // 下载打包文件
- private void DownloadFile(string fileName, string filePath)
- {
- FileInfo fileInfo = new FileInfo(filePath);
- Response.Clear();
- Response.ClearContent();
- Response.ClearHeaders();
- Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
- Response.AddHeader("Content-Length", fileInfo.Length.ToString());
- Response.AddHeader("Content-Transfer-Encoding", "binary");
- Response.ContentType = "application/octet-stream";
- Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
- Response.WriteFile(fileInfo.FullName);
- Response.Flush();
- File.Delete(filePath);// 删除已下载文件
- Response.End();
- }
具体使用
- protected void BtnDownloadFiles_Click(object sender, EventArgs e)
- {
- List listFJ = new List();// 保存附件路径
- List listFJName = new List();// 保存附件名字
- for (int i = 0; i < gridView.Rows.Count; i++)
- {
- htmlInputCheckBox chk = (Page.Master.FindControl("ContentPlaceHolder1").FindControl("gridView") as GridView).Rows[i].FindControl("checkboxname") as HtmlInputCheckBox;
- if (chk != null && chk.Checked)
- {
- string temp = gridView.Rows[i].Cells[14].Text.ToString().Trim();
- if (temp != " ")
- {
- listFJ.Add(Server.MapPath("~") + temp);
- listFJName.Add(temp);
- }
- }
- }
- string time = DateTime.Now.Ticks.ToString();
- ZipFileMain(listFJ.ToArray(), listFJName.ToArray(), Server.MapPath("~/uploadfiles/" + time + ".zip"), 9);// 压缩文件
- DownloadFile(Server.UrlEncode("附件. zip"), Server.MapPath("~/uploadfiles/" + time + ".zip"));// 下载文件
- }
来源: https://www.2cto.com/kf/201904/805476.html