// 打包并添加到附件
using (MemoryStream ms = new MemoryStream())
{
using (ZipOutputStream zipStream = new ZipOutputStream(ms))
{
var buffer = Encoding.UTF8.GetBytes(sb.ToString());
ZipEntry entry = new ZipEntry("test.html");
entry.IsUnicodeText = true;
entry.DateTime = DateTime.Now;
zipStream.IsStreamOwner = false;
zipStream.PutNextEntry(entry);
zipStream.Write(buffer, , buffer.Length); entry = new ZipEntry("test\\test2.html");
entry.IsUnicodeText = true;
entry.DateTime = DateTime.Now;
zipStream.IsStreamOwner = false;
zipStream.PutNextEntry(entry);
zipStream.Write(buffer, , buffer.Length); zipStream.Finish();
zipStream.Close();
ms.Seek(, SeekOrigin.Begin);
message.Attachments.AddFileAttachment("差异test.zip", ms.ToArray());
}
}

可参考:https://www.jb51.net/article/131706.htm

{
internal static class Compressor
{
public static Stream Decompress(Stream source, bool bidiStream)
{
int arg_1E_0 = source.ReadByte();
int num = source.ReadByte();
source.Position -= 2L;
if (arg_1E_0 != || num != )
{
return null;
}
if (bidiStream)
{
Stream stream = new MemoryStream();
using (GZipStream gZipStream = new GZipStream(source, CompressionMode.Decompress))
{
byte[] buffer = new byte[];
while (true)
{
int num2 = gZipStream.Read(buffer, , );
if (num2 == )
{
break;
}
stream.Write(buffer, , num2);
}
}
stream.Position = 0L;
return stream;
}
return new GZipStream(source, CompressionMode.Decompress);
} public static Stream Compress(Stream dest)
{
return new GZipStream(dest, CompressionMode.Compress, true);
} public static byte[] Compress(byte[] buffer)
{
byte[] result;
using (MemoryStream memoryStream = new MemoryStream())
{
using (Stream stream = new GZipStream(memoryStream, CompressionMode.Compress, true))
{
stream.Write(buffer, , buffer.Length);
}
result = memoryStream.ToArray();
}
return result;
} public static string Compress(string source)
{
return Convert.ToBase64String(Compressor.Compress(new UTF8Encoding().GetBytes(source)));
} public static byte[] Decompress(byte[] buffer)
{
byte[] result;
using (MemoryStream memoryStream = new MemoryStream(buffer))
{
if (Compressor.IsStreamCompressed(memoryStream))
{
using (MemoryStream memoryStream2 = Compressor.Decompress(memoryStream, true) as MemoryStream)
{
result = memoryStream2.ToArray();
return result;
}
}
result = buffer;
}
return result;
} public static string Decompress(string source)
{
byte[] bytes = Compressor.Decompress(Convert.FromBase64String(source));
return new UTF8Encoding().GetString(bytes);
} public static bool IsStreamCompressed(Stream stream)
{
int arg_1E_0 = stream.ReadByte();
int num = stream.ReadByte();
stream.Position -= 2L;
return arg_1E_0 == && num == ;
}
}
}

代码来自:https://github.com/FastReports/

[转][C#]压缩解压的更多相关文章

  1. Linux 压缩解压

    压缩解压 ------------------------------------------ linux 下所有的压缩格式,WinRAR 都支持 gzip .gz 格式 压缩文件: gzip 文件名 ...

  2. SAPCAR 压缩解压软件的使用方法

    SAPCAR 是 SAP 公司使用的压缩解压软件,从 SAP 网站下载的补丁包和小型软件基本都是扩展名为 car 或 sar 的,它们都可以用 SAPCAR 来解压.下面是它的使用说明: 用法: 创建 ...

  3. 对称加密之AES、压缩解压以及压缩加密解密解压综合实战

    AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密.   因此加密的安 ...

  4. linux笔记:linux常用命令-压缩解压命令

    压缩解压命令:gzip(压缩文件,不保留原文件.这个命令不能压缩目录) 压缩解压命令:gunzip(解压.gz的压缩文件) 压缩解压命令:tar(打包压缩目录或者解压压缩文件.打包的意思是把目录打包成 ...

  5. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  6. linux驱动系列之文件压缩解压小节(转)

    转至网页:http://www.jb51.net/LINUXjishu/43356.html Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通 ...

  7. Linux的压缩解压命令快速上手——解压篇

    在Linux系统中,压缩文件通常是先将若干文件(包括目录)打包成一个tar文件,然后再调用压缩程序将tar文件压缩成相应的压缩包,这也就是为什么Linux系的压缩包的后缀通常都是像tar.gz,tar ...

  8. RAR压缩解压命令

    RAR压缩解压命令 这几天一直没空更新博客,现在补上: 先介绍一下rar的命令格式及相关参数含义(摘自rar): 用法:   rar <命令> -<开关 1> -<开关 ...

  9. 使用SevenZipSharp压缩/解压7z格式

    7z格式采用的LZMA算法,号称具有现今最高压缩率.笔者在nuget上搜索7z,在搜索结果中最终选择了SevenZipSharp来进行压缩/解压.不得不说,SevenZipSharp的API设计得非常 ...

  10. huffman压缩解压文件【代码】

    距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...

随机推荐

  1. Django框架(四)

    八.Django 模型层(2) 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息. ...

  2. jQuery抽奖插件 jQueryRotate

    实现代码 网页中引用 <script type="text/javascript" src="js/jquery.min.js"></scri ...

  3. 用python做一个烟花show

    烟花效果如图(截了几个时刻的静态图): 源代码如下: # -*- coding: utf-8 -*- # Nola import tkinter as tk from PIL import Image ...

  4. 【阅读笔记】《C程序员 从校园到职场》第六章 配置文件,makefile 文件 (Part 2)

     Contents: 1.配置文件(通常以 ini 结尾) 2.makefile文件 (Linux) PS: 这篇文章的内容,不太理解. 一.配置文件 本文以一个实际的小软件为例,介绍了C语言中配置文 ...

  5. PHP有关守护进程,以及流程控制和信号处理函数

    守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.PHP也可以实现守护进程的功能. 1.基本概念 进程 ...

  6. python操作redis集群

    strictRedis对象方法用于连接redis 指定主机地址,port与服务器连接,默认db是0,redis默认数据库有16个,在配置文件中指定database 16 上代码 .对redis的单实例 ...

  7. 在windows下安装nvm并管理nodejs版本

    不得不说,nodejs的nvm工具跟python下的mkvirtualenv 工具很像.作为立志成为伪全栈的我来说,玩玩nodejs是必不可少的.nodejs 有很多种的安装方式,下面我用nvm的方式 ...

  8. 创建Car类,包含name,price属性,构造器等方法,创建测试类,在main方法中创建Set接口的实现类,添加5个以上的Car对象,遍历集合元素,验证重复元素是否过滤了; 如果没有过滤,实现过滤功能;把每个小车的price降10000元,再遍历,查看price是否已改变

    i汽车类 package com.lanxi.demo2_3; public class Car { private String name; private int price; @Override ...

  9. 如何使用HackRF做一个简单的IMSI捕获器

    关于IMSI IMSI为国际用户识别码(International Mobile Subscriber Identity)的缩写,是用于区分蜂窝网络中不同用户的,在所在蜂窝网络中不重复的识别码.IMS ...

  10. 定义action的允许访问方式

    publicfunction behaviors() { return[ 'verbs'=>[ 'class'=>VerbFilter::className(), 'actions'=&g ...