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");
}
}
}
}

最新文章

  1. Gevent中的同步与异步详解
  2. css的四种隐藏方式
  3. Hashtable,HashMap,Dictionary的区别
  4. RM报表 刷新打印机列表
  5. unity客户端与c++服务器之间的简单通讯_1
  6. 大神的vim配置
  7. WinCE CAB Manager 3.0学习
  8. Linux负载均衡软件LVS之二(安装篇)
  9. 使用pabot并发执行robotframework的testSuite
  10. java 包命名规范
  11. JDBC:从原理到应用
  12. nvm使用笔记
  13. shell编程企业级实战(2)
  14. js中的 substr方法与substring方法 不同
  15. JAVA中String.format()的使用
  16. Java Swing 实时刷新JTextArea,以显示不断append的内容?
  17. Cmder安装配置
  18. Android ——多线程处理之多线程用法大集合(转)
  19. oracle直方图
  20. 计算机作业(HTML简单框架网页制作) 物联网 王罗红

热门文章

  1. shell脚本 监控ps 不存在则重启
  2. 数组翻转(非reverse)
  3. Java数据结构--单链表
  4. SharePoint 开发另存文档库中文档
  5. KINDLE 小说下载--超级书库
  6. 0x00 C语言-环境配置
  7. Mysql连接字符,字段函数concat()
  8. 全网小说免费阅读下载APP
  9. PP: Unsupervised deep embedding for clustering analysis
  10. JS格式时间