[转][C#]压缩解压
// 打包并添加到附件
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());
}
}
{
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#]压缩解压的更多相关文章
- Linux 压缩解压
压缩解压 ------------------------------------------ linux 下所有的压缩格式,WinRAR 都支持 gzip .gz 格式 压缩文件: gzip 文件名 ...
- SAPCAR 压缩解压软件的使用方法
SAPCAR 是 SAP 公司使用的压缩解压软件,从 SAP 网站下载的补丁包和小型软件基本都是扩展名为 car 或 sar 的,它们都可以用 SAPCAR 来解压.下面是它的使用说明: 用法: 创建 ...
- 对称加密之AES、压缩解压以及压缩加密解密解压综合实战
AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密. 因此加密的安 ...
- linux笔记:linux常用命令-压缩解压命令
压缩解压命令:gzip(压缩文件,不保留原文件.这个命令不能压缩目录) 压缩解压命令:gunzip(解压.gz的压缩文件) 压缩解压命令:tar(打包压缩目录或者解压压缩文件.打包的意思是把目录打包成 ...
- .NET使用ICSharpCode.SharpZipLib压缩/解压文件
SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...
- linux驱动系列之文件压缩解压小节(转)
转至网页:http://www.jb51.net/LINUXjishu/43356.html Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通 ...
- Linux的压缩解压命令快速上手——解压篇
在Linux系统中,压缩文件通常是先将若干文件(包括目录)打包成一个tar文件,然后再调用压缩程序将tar文件压缩成相应的压缩包,这也就是为什么Linux系的压缩包的后缀通常都是像tar.gz,tar ...
- RAR压缩解压命令
RAR压缩解压命令 这几天一直没空更新博客,现在补上: 先介绍一下rar的命令格式及相关参数含义(摘自rar): 用法: rar <命令> -<开关 1> -<开关 ...
- 使用SevenZipSharp压缩/解压7z格式
7z格式采用的LZMA算法,号称具有现今最高压缩率.笔者在nuget上搜索7z,在搜索结果中最终选择了SevenZipSharp来进行压缩/解压.不得不说,SevenZipSharp的API设计得非常 ...
- huffman压缩解压文件【代码】
距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...
随机推荐
- mysql,Jdbc工具类,只需一条sql实现简单查询
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import ...
- ubuntu文档保存出现的一些错误
ubuntu使用vim编辑器保存时,出现了错误,虽然知道基本的保存方法,但是还不够,出现各种错误.基本的保存命令: 写入文件后退出保存:wq后,保存时出现错误E45:已设定选项“readonly”(请 ...
- Win10系列:C#应用控件进阶3
椭圆 若要绘制椭圆需要用到Ellipse元素,通过指定Ellipse元素的Width和Height属性值来确定椭圆的大小,其中Width指椭圆在X轴的宽度,Height指椭圆在Y轴的高度,若X轴和Y轴 ...
- 线程基础:多任务处理——MESI协议以及带来的问题:伪共享
1.概述 本文和后续文章将着眼CPU的工作原理阐述伪共享的解决方法和volatile关键字的应用. 2.复习CPU工作原理2.1.CPU工作原理要清楚理解本文后续内容,就需要首先重新概述一下JVM的内 ...
- Handlebars的基本用法
使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Handlebars 强大的功能. ...
- 曾经觉得学习晦涩难懂的我是如何爱上linux的
2016年冬天,我已经是一名学习计算机科学与技术专业的大三的“老腊肉”了,但是当时的水平依旧平平.就在2016年快要结束的时候,我周围的同学们被一股考研和工作的压力炸开了锅,我也在默默思考着我的人生, ...
- PFM 图片格式
PFM 图片格式 参考: https://linux.die.net/man/5/pfm 1. 描述 本文档描述了Netpbm转换器pamtopfm(1)和pfmtopam(1)所理解的PFM图 ...
- 指导手册05:MapReduce编程入门
指导手册05:MapReduce编程入门 Part 1:使用Eclipse创建MapReduce工程 操作系统: Centos 6.8, hadoop 2.6.4 情景描述: 因为Hadoop本身 ...
- centos 进程查看
查看pid 所属文件/项目 ps -aux |grep -v grep|grep 51073
- Problem B: 平面上的点和线——Point类、Line类 (II)
Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段.现在我们封装一个“Point类”和“Line类”来实现平面上的点的操作. 根据“append ...