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!