引用ICSharpCode.SharpZipLib.dll

1、编写压缩和解压代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ICShaepCode.SharpZipLib;
using ICShaepCode.SharpZipLib.Zip;
using ICShaepCode.SharpZipLib.Checksums;
using System.IO; namespace CommonHelper
{
/// <summary>
/// 解压缩文件帮助类
/// </summary>
class ZipOperateHelper
{
/// <summary>
/// 递归压缩文件夹方法
/// </summary>
/// <param name="FolderToZip"></param>
/// <param name="s"></param>
/// <param name="ParentFolderName"></param>
/// <returns></returns>
private static bool ZipFileDictory(string FolderToZip, ZipOutputStream s, string ParentFolderName)
{
bool res = true;
string[] folders, filenames;
ZipEntry entry = null;
FileStream fs = null;
Crc32 crc = new Crc32(); try
{
//创建子文件
entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderZip) + "/"));//加上“/”才会当成是文件夹创建
s.PutNextEntry(entry);
s.Plush; //先压缩文件,再递归压缩文件夹
filenames = Directory.GetFiles(FolderToZip);
foreach (string file in filenames)
{
//打开压缩文件
fs = File.OpenRead(file); byte[] buffer = new byte[fs.Length];
fs.Read(buffer, , buffer.Length);
entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/" + Path.GetFileName(file))); entry.DateTime = DateTime.Now();
entry.Size = fs.Length;
fs.Close(); crc.Reset();
crc.Update(buffer); entry.Crc = cec.Value; s.PutNextEntry(entry); s.Write(buffer, , buffer.Length);
}
}
catch (Exception)
{
res = false;
}
finally
{
if (fs != null)
{
fs.Close();
fs = null;
}
if (entry != null)
entry = null; GC.Collect();
GC.Collect();
} folders = Directory.GetDirectories(FolderToZip);
foreach (string folder in folders)
{
if (!ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip))))
return false;
} return res;
} /// <summary>
/// 压缩目录
/// </summary>
/// <param name="FolderToZip">待压缩文件夹,全路径格式</param>
/// <param name="ZipedFile">压缩后的文件夹名,全路径格式</param>
/// <param name="Password"></param>
/// <returns></returns>
private static bool ZipFileDictory(string FolderToZip, string ZipedFile, String Password)
{
bool res;
if (Directory.Exists(FolderToZip))
return false; ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFile));
s.SetLevel();
s.Password = Password; res = ZipFileDictory(FolderToZip, s, ""); s.Finish();
s.Close(); return res;
} /// <summary>
/// 压缩文件
/// </summary>
/// <param name="FileToZip">要进行压缩的文件名</param>
/// <param name="ZipedFile">压缩后产生的压缩文件名</param>
/// <param name="Password"></param>
/// <returns></returns>
private static bool ZipFile(string FileToZip, string ZipedFile, String Password)
{
//如果没有找到,则报错
if (!File.Exists(FileToZip))
throw new System.IO.FileNotFoundException("指定要压缩的文件:" + FileToZip + "不存在"); FileStream ZipFile = null;
ZipOutputStream ZipStream = null;
ZipEntry ZipEntry = null; bool res = true;
try
{
ZipFile = File.OpenRead(FileToZip);
byte[] buffer = new byte[FileToZip.Length];
ZipFile.Read(buffer, , FileToZip.Length);
ZipFile.Close(); ZipFile = File.Create(ZipedFile);
ZipStream = new ZipOutputStream(ZipFile);
ZipStream.Password = Password;
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(); ZipStream.Write(buffer, , buffer.Length);
}
catch
{
res = false;
}
finally
{
if (ZipEntry != null)
ZipEntry = null;
if (ZipStream != null)
{
ZipStream.Finish();
ZipStream.Close();
}
if (ZipFile != null)
{
ZipFile.Close();
ZipFile = null;
} GC.Collect();
GC.Collect();
}
return res;
} /// <summary>
/// 压缩文件和文件夹
/// </summary>
/// <param name="FileToZip">待压缩的文件或文件夹,全路径格式</param>
/// <param name="ZipedFile">压缩后生成的压缩文件名,全路径格式</param>
/// <param name="Password"></param>
/// <returns></returns>
public static bool Zip(String FileToZip, String ZipedFile, String Password)
{
if (Directory.Exists(FileToZip))
return ZipFileDictory(FileToZip, ZipedFile, Password);
else if (File.Exists(FileToZip))
return ZipFile(FileToZip, ZipedFile, Password);
else
return false;
} /// <summary>
/// 解压功能(解压压缩文件到指定目录)
/// </summary>
/// <param name="FileToUpZip">待压缩文件</param>
/// <param name="ZipedFolder">指定解压目标目录</param>
/// <param name="Password"></param>
public static void UnZip(string FileToUpZip, string ZipedFolder, string Password)
{
if (!File.Exists(FileToUpZip))
return; if (!Directory.Exists(ZipedFolder))
Directory.CreateDirectory(ZipedFolder); ZipInputStream s = null;
ZipEntry theEntry = null; string fileName;
FileStream writer = null;
try
{
s = new ZipInputStream(File.OpenRead(FileToUpZip));
s.Password = Password;
while ((theEntry = s.GetNextEntry()) != null)
{
if (theEntry.Name != String.Empty)
{
fileName = Path.Combine(ZipedFolder, theEntry.Name);
//判断文件路径是否是文件夹
if (fileName.EndsWith("/") || fileName.EndsWith("//"))
{
Directory.CreateDirectory(FileName);
continue;
} writer = File.Create(FileName);
int size = ;
byte[] data = new byte[];
while (true)
{
size = s.Read(data, , data.Length);
if (size > )
writer.Write(data, , size);
else
break;
}
}
}
}
finally
{
if (writer != null)
{
writer.Close();
writer = null;
}
if (theEntry != null)
theEntry = null;
if (s != null)
{
s.Close();
s = null;
} GC.Collect();
GC.Collect();
}
}
}
}

2、导出数据生成Excel(MVC)

        /// <summary>
/// 生成Excel
/// </summary>
/// <returns></returns>
public FileResult ExportProductInfo()
{
List<Aniuge_spu> spuList = ProductBusiness.GetInstance().GetProdutInfo();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='1'cellspacing='0' cellpadding='0'>");
sb.Append("<tr>");
List<string> list = new List<string> { "编号", "名称", "形状" };
//第一行
foreach (var item in list)
{
sb.AppendFormat("<td style='font-size:14px;text-align:center;'>{0}</td>", item);
}
//获取的参数列表绑定
foreach (var item in spuList)
{
sb.Append("<tr>");
sb.AppendFormat("<td>{0}</td>", item.Code);
sb.AppendFormat("<td>{0}</td>", item.Name);
sb.AppendFormat("<td>{0}</td>", item.Shape);
sb.Append("</tr>");
}
sb.Append("</table>"); byte[] fileContents = Encoding.Default.GetBytes(sb.ToString());
//下载
return File(fileContents, "application/ms-excel", "streams.xls");
}

3、导出txt格式的说明书

        /// <summary>
/// 说明书
/// </summary>
/// <returns></returns>
public FileResult ExportPackageInfo()
{
List<Aniuge_spu> spuList = ProductBusiness.GetInstance().GetProdutInfo();
string zipName = DateTime.Now.ToString("yyyyMMddHHmmss");
string filepath = Server.MapPath("~/upload/PackageInsert") + zipName;
if (!System.IO.Directory.Exists(filepath))
System.IO.Directory.CreateDirectory(filepath); foreach (var item in spuList)
{
FileStream file = new FileStream(filepath + "\\" + item.Code + ".txt", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(file);
sw.WriteLine(item.PackageInsert);
sw.Close();
fileClose();
} ZipOperateHelper.Zip(filepath, Server.MapPath("~/upload/PackageInsert/") + "\\" + zipName + ".txt", "");
//下载
return File(new FileStream(filepath + ".zip", FileMode.Open), "application/octet-stream", Server.UrlEncode(zipName + ".zip"));
}

导出数据库数据制成Excel和txt的更多相关文章

  1. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...

  2. 配置ODBC DSN数据源,导出数据库数据到Excel过程记录

    一.前言 工作中我们可能遇到这样的需要:查询数据库中的信息,并将结果导出到Excel文件.这本来没什么,但数据量比较大时,用PLSQL.toad导出Excel会出现内存不足等情况,使用odbc+Mic ...

  3. 导出数据库数据到Excel表

    后台需要将用户信息数据导入到Excel表中提供给相关人员: 首先查询数据就不多说了: 导入Excel表直接亮代码(采用的是jxl的jar包提供的方法): public static File Impo ...

  4. 数据库数据用Excel导出的3种方法

    将数据库数据用Excel导出主要有3种方法:用Excel.Application接口.用OleDB.用HTML的Tabel标签 方法1——Excel.Application接口: 首先,需要要Exce ...

  5. PHP导出MySQL数据到Excel文件

    PHP导出MySQL数据到Excel文件 转载 常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存 ...

  6. .NET使用Office Open XML导出大量数据到 Excel

    我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...

  7. Excel导出数据库数据

    package com.hxkr.util; import java.io.FileOutputStream; import java.util.ArrayList; import java.util ...

  8. java导出数据到excel里:直接导出和导出数据库数据

    一.直接导出 package com.ij34.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; ...

  9. 数据库数据生成Excel表格(多用在导出数据)

    最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...

随机推荐

  1. 解决insmod: error inserting 'hello.ko': -1 Invalid module format

    编译自己的内核模块后,insmod出现error:error inserting 'hello.ko': -1 Invalid module format 出现这种情况的原因是因为Makefile种使 ...

  2. POJ 2352 【树状数组】

    题意: 给了很多星星的坐标,星星的特征值是不比他自己本身高而且不在它右边的星星数. 给定的输入数据是按照y升序排序的,y相同的情况下按照x排列,x和y都是介于0和32000之间的整数.每个坐标最多有一 ...

  3. @Valid springMVC bean校验不起作用

    @RequestMapping("/add2") public String addStudentValid(@Valid @ModelAttribute("s" ...

  4. 【转】maven POM.xml 标签详解

    http://blog.csdn.net/sunzhenhua0608/article/details/32938533 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现 ...

  5. 安装LINUX X86-64的10201出现链接ins_ctx.mk错误

    在安装linux X86-64的Oracle10201时,在链接过程中出现了这个错误. 详细错误信息为: Error in invoking target ‘install’ of makefile  ...

  6. HDU 4390 Number Sequence 容斥原理

    Number Sequence Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. Map集合的遍历方式:

    迭代器来遍历 : entrySet() ; keySet(); values(); eg.HashMap<String,String> map = new HashMap<Strin ...

  8. MFC学习 标签页与属性页及各常用控件使用

    参考 http://blog.csdn.net/anye3000/article/details/6700023 CTabCtrl: BOOL CTabTestDlg::OnInitDialog() ...

  9. Appium输入中文的问题,简单的方法

    经常有人问,Appium怎么输入中文,下面提供一种相对简单的方式. 以前曾经提到过capabilities关键字,里面有这样2个属性, |`unicodeKeyboard`| 使用 Unicode 输 ...

  10. 【LeetCode】11. Container With Most Water

    题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...