using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Compression;
using System.IO;
using System.Diagnostics; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
DecompressDemo();
Console.ReadLine();
} private static void CompressDemo()
{
string source = @"D:\";
string[] files = Directory.GetFiles(source, "*", SearchOption.AllDirectories);
if(files!=null && files.Any())
{
foreach(var file in files)
{
CompressFile(file);
}
}
}
private static void CompressFile(string file)
{
Console.WriteLine($"Start to compress {file}");
Stopwatch sw = new Stopwatch();
sw.Start();
string compressedFullName = Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file)) + ".zip";
if (File.Exists(compressedFullName))
{
File.Delete(compressedFullName);
} Task compressTask = Task.Run(() =>
{
using (FileStream fs = File.Open(file, FileMode.Open))
{
using (FileStream compressedFileStream = File.Create(compressedFullName))
{
using (GZipStream gZipStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
fs.CopyTo(gZipStream);
}
}
}
}); compressTask.Wait();
sw.Stop();
if (compressTask.IsCompleted)
{
Console.WriteLine($"{file} has been compressed successfully,cost:{sw.ElapsedMilliseconds} ElapsedMilliseconds!");
}
}
private static void DecompressDemo()
{
string source = @"D:\";
string[] compressedFiles = Directory.GetFiles(source, "*.zip");
if (compressedFiles != null && compressedFiles.Any())
{
foreach (var file in compressedFiles)
{
DecompressFile(file);
}
}
}
private static void DecompressFile(string file)
{
Console.WriteLine($"Start to decompress {file}");
Stopwatch decompressSW = new Stopwatch();
decompressSW.Start(); string newFileName = Path.Combine(Path.GetDirectoryName(file)) + Guid.NewGuid().ToString() + Path.GetFileNameWithoutExtension(file); Task decompressTask = Task.Run(() =>
{
using (FileStream fs = File.Open(file, FileMode.Open))
{
using (FileStream decompressedStream = File.Create(newFileName))
{
using (GZipStream gzipdecompressedStream = new GZipStream(fs, CompressionMode.Decompress))
{
gzipdecompressedStream.CopyTo(decompressedStream);
}
}
}
}); decompressTask.Wait();
if(decompressTask.IsCompleted)
{
decompressSW.Stop();
Console.WriteLine($"Decompress as {newFileName} cost {decompressSW.ElapsedMilliseconds} milliseconds");
}
}
}
}

C# GZip Compress DeCompress的更多相关文章

  1. AIX 文件 打包 与 压缩 tar gzip compress 的使用

    今天在Aix用tar -cvf 备份,打成tar包,占有硬盘空间过大,没有压缩比, 尝试使用tar -zcvf  linux系统下可以用-z 命令 (z 用gzip来压缩/解压缩文件,加上该选项后可以 ...

  2. Gzip模块

    Gzip模块为python的压缩和解压缩模块,读写gzip 文件 一.使用gzip模块压缩文件: 1 import gzip #导入python gzip模块,注意名字为全小写 2 g = gzip. ...

  3. Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)

    本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72672703 以下代码以Python3.6.1为例 L ...

  4. python中gzip模块的使用

    gzip模块能够直接压缩和解压缩bytes-like类型的数据,同时也能实现对应格式文件的压缩与解压缩 一.数据压缩与解压缩 压缩 函数-gzip.compress(data, compresslev ...

  5. thttpd增加gzip压缩响应报文体功能,以减少传输数据量

    thttpd thttpd是一个非常小巧的轻量级web server,它非常非常简单,仅仅提供了HTTP/1.1和简单的CGI支持,在其官方网站上有一个与其他web server(如Apache, Z ...

  6. 【Web优化】Yslow优化法则(四)启用Gzip压缩

    Yslow的第4个经验法则指出:启用gzip压缩功能,能够降低HTTP传输的数据和时间,从而降低client请求的响应时间. 本篇是Yslow法则的第四个,主要包含三个方面的内容: 1.      什 ...

  7. GZIP压缩与解压

    public class GZIP { /** * 字符串的压缩 * * @param str * 待压缩的字符串 * @return 返回压缩后的字符串 * @throws IOException ...

  8. python3 发送gzip文件请求

    #condig=utf-8import requestsimport json,gzip def toGzipFormat(postData): data=bytes(json.dumps(postD ...

  9. 前端性能优化成神之路-HTTP压缩开启gzip

    什么是HTTP压缩 HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法. HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件. 能大大减少 ...

随机推荐

  1. 1282 - Leading and Trailing 求n^k的前三位和后三位。

    1282 - Leading and Trailing You are given two integers: n and k, your task is to find the most signi ...

  2. 【小方法】navicate for mysql使数据库可以识别中文

    右键选择新建数据库,将字符集与排序规则改成utf-8形式

  3. docker实战部署Javaweb项目

    一.部署环境说明 docker服务版本:version 18.09.0nginx服务版本:version: nginx/1.15.10redis服务版本:version: redis/5.0.3tom ...

  4. finalshell连接工具

    FinalShell功能特点: 1.多平台支持Windows,Mac OS X,Linux2.多标签,批量服务器管理.3.支持登录Ssh和Windows远程桌面.4.漂亮的平滑字体显示,内置100多个 ...

  5. .net代码实现上千次ping的实现

    先上代码: 多线程实现ping校验: public void PingCameraNew(List<CameraMongoDto> assetlist) { ThreadPool.SetM ...

  6. Git分支管理介绍

    分支管理 软件的版本控制以及分支管理贯穿于整个软件产品的生命周期,日常的项目管理对于开发团队能否有节奏且顺利的交付软件也很重要.本分支管理和版本控制规范主要分为3个部分,即分支管理规范.版本号规范.需 ...

  7. 掌握这13个MySQL索引知识点,让你面试通过率翻倍

    数据库索引有关的知识,说实在的,真的是很复杂,本来想好好看看这方面的东西,然后写篇文章详细谈谈的,后来发现索引的知识太难太深,要谈得全面又详细真的很难,所以最后还是把自己学到的和想到的变成下面一个个的 ...

  8. Python核心编程:《8个实践性建议》

    前言 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑踩过的雷总结出来的,现在在这里分享一下给大家,因为很多伙伴是接触P ...

  9. 刷题84. Largest Rectangle in Histogram

    一.题目说明 题目84. Largest Rectangle in Histogram,给定n个非负整数(每个柱子宽度为1)形成柱状图,求该图的最大面积.题目难度是Hard! 二.我的解答 这是一个 ...

  10. svn cleanup 失败问题解决

    将sqlite3.exe放到.svn的同级目录 4.启动cmd执行sqlite3 .svn/wc.db "select * from work_queue" 5.启动cmd执行sq ...