C# - Compactando e Descompactando na memória
Hoje veremos como compactar e descompactar arquivos na memória usando a classe GZipStream e métodos de extensão. |
Geralmente quando realizamos alguma compactação na memória de uma grande quantidade de texto armazenamos o resultado em um arquivo ou banco de dados.
No entanto podemos também enviar o arquivo compactado via email como um anexo para que o destinatário possa receber e descompactar.
Seja qual for o motivo, a compactação e descompactação na memória é um recurso muito útil, e, uma forma bem simples de realizar esta tarefa é usar métodos de extensão.
O namespace namespace System.IO.Compression da contém classes para compactar e descompactar streams (arquivos, sequências de caracteres, bytes, etc) fornecendo recursos para realizar tais tarefas de forma bem simples.
Neste namespace destacamos a classe GZipStream fornece métodos e propriedades usadas para compactar e descompactar streams.
Vejamos como fazer isso funcionar...
Crie um novo projeto do tipo Console (.NET Core) no VS 2019 chamado Demo1
No projeto crie uma classe chamada ExtensionMethods e defina os métodos CompressStream e DecompressStream:
using System.IO; using System.IO.Compression;
namespace Demo1 |
Nota : Se você não sabe como funcionam os métodos de extensão veja este meu artigo: Métodos de Extensão
Agora suponha que em uma pasta do seu sistema local existe um arquivo chamado ArquivoDemo.txt.
Vamos definir o código na classe Program para ler este arquivo e realizar a compactação e descompactação na memória usando os métodos de extensão criados acima:
using static System.Console; using System.IO; using System.Text; using Demo1; string arquivoGrande = @"C:\dados\txt\ArquivoDemo.txt"; string arquivoLido = File.ReadAllText(arquivoGrande); var tamanhoOriginal = bytes.Length; var novoArquivoDescompactado = compactado.DecompressStream(); WriteLine($"Tamanho do Arquivo Original = {tamanhoOriginal}"); ReadLine(); |
No código acima estou usando o novo recurso Top Level Statements do C# 9.0.
Executando o projeto temos o seguinte resultado :
A compactação e descompactação na memória permite usar compactação e descompressão dinâmica ao trabalhar com arquivos grandes. Isso pode ser útil quando você precisa ler e gravar informações de log em um banco de dados.
Pegue o código do projeto aqui: Demo1.zip
"Se o SENHOR não edificar a casa, em vão trabalham os que
a edificam; se o SENHOR não guardar a cidade, em vão vigia a sentinela."
Salmos 127:1
Referências:
C# - Obtendo a data e a hora por TimeZone
C# - O Struct Guid - Macoratti.net
C# - Checando Null de uma forma mais elegante e concisa
DateTime - Macoratti.net
Null o que é isso ? - Macoratti.net
Formatação de data e hora para uma cultura ...
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern - Macoratti
C# - Fundamentos : Definindo DateTime como Null ...
C# - Os tipos Nullable (Tipos Anuláveis) - Macoratti.net