Compactando e Descompactando com SharpZipLib no .Net Framework

by Felipe Oriani 23. novembro 2011 12:45

Olá pessoal, hoje precisei realizar um processo com arquivos de texto do Open Office (com extensão .odt) que assim como as últimas versões do Microsoft Office, trabalha com arquivo de forma compactada e integrando todo o conteúdo dentro deste arquivo e interpretado pelo editor.  Neste arquivo vou demonstrar de forma rápida como compactar e descompactar arquivos na plataforma .Net utilizando o componente SharpZipLib

Você pode fazer o download do SharpZipLib neste link:

http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

A versão atual é a 0.86 e contém diversas possibilidades. Vou demonstrar aqui como compactar uma pasta e descompactar um arquivo .zip. Imaginando que você já possui um projeto e a DLL do SharpZipLib devidamente referenciada. 


Descompactar:

var zip = new FastZip();
zip.ExtractZip("C:\\input.zip", "C:\\temp", string.Empty);

Observe que o primeiro parâmetro é relacionado ao arquivo a ser extraído, o segundo é em qual diretório o conteúdo será exibido e o terceiro é um possível filtro para selecionar quais arquivos serão extraídos (passando uma string vazia indicamos que não temos filtro e todo o conteúdo será extraído).

Compactando uma pasta:

var zip = new FastZip();
zip.CreateZip("C:\\output.zip", "C:\\temp", true, string.Empty);

Neste segundo exemplo, informamos o qual o caminho do arquivo a ser gerado, o segundo parâmetro informa qual o diretório que desejamos compactar, o terceiro se o componente deve utilizar recursividade e por fim um filtro para arquivos a serem compactados.

Temos ainda a opção de compactar em um Stream (de memória, arquivo, rede etc), veja o exemplo:

var memory = new MemoryStream();
var zip = new FastZip();
zip.CreateZip(memory, "C:\\temp", true, string.Empty, string.Empty);

Neste exemplo, o primeiro parâmetro é um Stream (de memória neste caso), o segundo parâmetro a pasta que será compactada e os demais parâmetros assim como no primeiro exemplo de compactação.

Como meu caso tratava-se de um relatório, consegui dispensar a escrita em disco do resultado da compactação, modificando os arquivos necessários e entregando para o client o resultado direto da memória. 

Bem pessoal, é isso. Em um próximo artigo, pretendo mostrar como customizar arquivos .odt e .docx para geração de relatórios dinâmicos.

Obrigado!

Abraços!

Tags: ,

.Net Framework | C#

Comentar

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading

Sobre

Sou Felipe Oriani e trabalho com desenvolvimento web desde 2004, com tecnologias Microsoft como Asp e Asp.Net utilizando as linguagens C# e Vb.Net. Bacharel em Ciência da Computação pela Escola de Engenharia de Piracicaba,  MCTS (.Net Framework 3.5, ASP.NET Applications). Conheça um pouco mais sobre meu CurrículumVeja mais 

Social

profile for Felipe at Stack Overflow, Q&A for professional and enthusiast programmers

Selos

MCTS .Net Framework 3.5, ASP.NET Developer

MCP - Microsoft Certified Professional