C# GZip Compress DeCompress

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
05-28
C#中,使用`System.IO.Compression`命名空间中的`GZipStream`类可以对数据进行Gzip压缩和解压缩。以下是一个简单的示例代码: ```csharp using System; using System.IO; using System.IO.Compression; class Program { static void Main(string[] args) { string inputString = "Hello World!"; // 压缩字符串 byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(inputString); using (var outputStream = new MemoryStream()) { using (var gzipStream = new GZipStream(outputStream, CompressionMode.Compress)) { gzipStream.Write(inputBytes, 0, inputBytes.Length); } byte[] compressedBytes = outputStream.ToArray(); Console.WriteLine(Convert.ToBase64String(compressedBytes)); // 输出压缩后的字符串 } // 解压缩字符串 byte[] compressedBytes2 = Convert.FromBase64String("H4sIAAAAAAAAACsuKcrMS1GyMDc3MzU0BQAAP//+QcAAAA="); using (var inputStream = new MemoryStream(compressedBytes2)) { using (var gzipStream = new GZipStream(inputStream, CompressionMode.Decompress)) { using (var outputStream = new MemoryStream()) { gzipStream.CopyTo(outputStream); byte[] uncompressedBytes = outputStream.ToArray(); string outputString = System.Text.Encoding.UTF8.GetString(uncompressedBytes); Console.WriteLine(outputString); // 输出解压缩后的字符串 } } } } } ``` 在上面的代码中,我们首先将输入字符串转换为字节数组,然后使用`GZipStream`类进行压缩。在压缩时,我们创建一个输出流`outputStream`,然后将其传递给`GZipStream`类的构造函数。在调用`Write`方法时,`GZipStream`类将压缩数据写入输出流中。最后,我们将输出流转换为字节数组,并使用`Convert.ToBase64String`方法将其转换为base64编码的字符串进行输出。 在解压缩时,我们将压缩后的字节数组转换为输入流`inputStream`,然后再次使用`GZipStream`类进行解压缩。在解压缩时,我们创建一个输出流`outputStream`,然后使用`CopyTo`方法将解压缩后的数据从`GZipStream`类复制到输出流中。最后,我们将输出流转换为字节数组,并将其转换为字符串进行输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值