引用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. Dede cms文章内容管理系统安全漏洞!如何有效防止DEDE织梦系统被挂木马安全设置

    第一.安装Dede的时候数据库的表前缀,最好改一下,不要用dedecms默认的前缀dede_,可以改成ljs_,随便一个无规律的.难猜到的前缀即可. 第二.后台登录一定要开启验证码功能,将默认管理员a ...

  2. C++学习30 重载++和--(自增自减运算符)

    自增“++”和自减“--”都是一元运算符,它的前置形式和后置形式都可以被重载.请看下面的例子: #include <iostream> #include <iomanip> u ...

  3. Bitbucket使用方法

    一.软件及SSH keys: 由于我的Bitbucket账号的邮箱及用户名与Github相同,所以SSH Public Keys可以用Github的,登录Bitbucket,悬浮在用户名boliqua ...

  4. poj3253

    一道赫夫曼树的经典题目,一直以为这题的代码会很复杂,没想到书中竟描述地如此简单 #include <stdio.h> int n; long long p[20010]; //一道经典的赫 ...

  5. Mac 下 Maven 的命令行安装

    JDK 的安装 系统的“系统偏好设置”中我们可以看到 Java的设置, Java 7(含) 之后的版本在这里可以看到. 点击进去后,可以看到独立的 Java 控制面板 注意,这里是 JRE 的版本, ...

  6. hive 调用java的函数和科学记数法转换

    hive中field如果是string,比如id,那么使用10000000000+id结果是科学计数法显示,转换为正常显示方法: select (10000000000+cast(id as int) ...

  7. Grunt - Karma 单元测试

    Karma 是 Goolge 开源的一个 Test runner, 可以配合 Grunt 使用. 1. 相关插件介绍 1.1 Karma 的官网 http://karma-runner.github. ...

  8. Flask框架学习笔记(API接口管理平台 V1.0)

    今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...

  9. 视差贴图(Parallax Mapping)

    使用顶点光照的模型,当模型的面数很少的时候,光照效果会显得很奇怪,因为只有顶点上的光照是正确计算出来的,三角面上的光照都是通过硬件插值得到,所以难免会出现问题.基于像素的光照可以很好的改善这个问题.如 ...

  10. 【LeetCode】84. Largest Rectangle in Histogram

    Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar height ...