Compactação de Arquivos no Framework 2.0

Publicado: 03/08/2005 em IntoSpaces
Há algum tempo eu já havia trabalhado neste meu pequeno sample de compactação de arquivos utilizando o fw 2.0, e agora a pouco vi no blog do Dennes os 101 Samples no site da Microsoft que implementam um exemplo desses. Então vou deixar o meu aqui e depois vocês comparam as duas formas, a que eu criei e a dos samples!

Bom no .NET 2.0 temos uma série de classes novas muito úteis no Namespace System.IO, e algumas delas são as de compressão de arquivos, System.IO.Compression

Encontramos 2 classes interessantes lá, DeflateStream e GZipStream.
A primeira serve como base para algoritmos de compressão, tantp que GZipStream utiliza seus recursos internamente.
A GZipStream implementa o algoritmo para compactação de arquivos no formato .GZIP (GNU ZIP). A princípio ela compacta Streams em memória e cabe a nós salvarmos este Stream em disco e é isso que esta simples classe que eu criei faz, vejam…

using System.IO;
using System.IO.Compression;
using System.Windows.Forms;
namespace Shindesign.IO
{
   class Compression
   {
      public Compression(){}
      public void Zip(string filename)
      {
         using (GZipStream gzip = new GZipStream(File.Create(filename + ".gz"), CompressionMode.Compress))
         {
            using (Stream stream = File.OpenRead(filename))
            {
               Pump(stream, gzip);
            }
         }
     
}
    
      public static void Unzip(string filename)
      {
         using(GZipStream gzip = new GZipStream(File.OpenRead(filename), CompressionMode.Decompress))
         {
            using (Stream stream = File.Create(filename + ".decompressed"))
           
{
               Pump(gzip, stream);
            }
         }
     
}
  
      private
static void Pump(Stream input, Stream output)
      {
         byte[] buffer = new byte[4096];
         int readed;
         while ((readed = input.Read(buffer, 0, buffer.Length)) != 0)
         {
            output.Write(buffer, 0, readed);
         }
      }
   }
}Bom é bem por aí, simples não? A mágica está no método Pump que recebe um Stream compactado ou não e escreve em um outro Stream que está indicado para ser salvo em Disco.
Simples né? Solução Managed para este problema!!! Ótimo!
Agora um detalhe que eu achei intrigante foi como compactar mais de um arquivo neste pacote, alguém se habilita?

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s