Archive Zip: Zipando e Extraindo Arquivos

Iniciado por Joey, 12 de Março , 2009, 12:50:45 AM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Joey

O Archive::Zip é um módulo Perl que nos permite trabalhar com arquivos Zip.

Podemos tanto extrair como "zipar" arquivos com ele. Mas o que é zipar?  Zipar é um termo que significa compactar arquivos.

Citar"Zipando"

Para compactar, extrair, modificar arquivos, enfim, realizar qualquer tarefa com arquivos compressos, o Archive::Zip é uma excelente alternativa se você não está, ou não deseja depender dos comandos de um ambiente Unix.

Como em todos estes exemplos utilizaremos o Archive Zip, podemos já chamar o módulo para nosso programa:

use Archive::Zip;

Agora vamos ver como utilizá-lo em algumas tarefas.
Compactando Arquivos

O primeiro passo é criar uma instância do programa e armazená-la em uma variável.

my $zip    = new Archive::Zip( );

Agora todo o conteúdo que desejamos colocar em nosso arquivo zip deverá ser inserido na variável $zip.

Existem várias alternativas para fazermos isto. Iremos mostrar como realizar esta tarefa utilizando três comandos diferentes: inserindo pastas, inserindo arquivos e criando de arquivos.

   *. Inserindo pastas com addTree( )

$zip->addTree("C:/arquivos");

Com o código acima, todo o conteúdo da pasta "C:/arquivos" será adicionado no arquivo zip.

   *. Inserindo arquivos com addFile( )

$zip->addFile( 'original.txt', 'novo.txt');

O comando addFile nos permite passar dois argumentos, sendo somente o primeiro obrigatório. Estes representam [localdoarquivo,][destinoarquivo]. Em nosso exemplo, o arquivo 'original.txt' será adicionado ao arquivo zip, porém, com o nome 'novo.txt'.

   *. Criando arquivos com addString( )

$zip->addString( 'Olá Mundo!', "texto.txt");

O código acima criará um arquivo chamado "texto.txt" contendo as palavras "Olá Mundo!" em seu conteúdo.

Após inserir os arquivos desejados na variável $zip, podemos transferir então os dados para arquivo com apenas uma função, a writeToFileNamed( ).

$zip->writeToFileNamed( 'C:/arquivos.zip' );

CitarVeja o Código Completo:
(zip-exemplo1.pl)

    #!/usr/bin/perl
    use Archive::Zip;

    $pasta="C:/arquivos";          # Pasta original
    $saida=" C:/arquivos.zip";    # Arquivo compactado de saída

    my $zip    = new Archive::Zip( ); # Cria uma nova instância

    $zip->addTree( $pasta ); # Adiciona uma pasta
    $zip->addFile( 'original.txt', 'novo.txt'); # Adiciona um arquivo
    $zip->addString( 'Olá Mundo!', 'texto.txt' ); # Cria um arquivo

    die "Erro ao Gravar" unless $zip->writeToFileNamed( $saida ) == AZ_OK;
    # Se não obter erros, cria arquivo zipado

A tarefa de descompactar arquivos utilizando o Archive Zip é algo extremamente fácil.

Com apenas dois comandos é possivel fazer isto. Acredita?

Vejamos.

Citar"Descompactando"

Logo na instânciação já chamamos o arquivo zipado ao qual iremos descompactar.

my $zip = new Archive::Zip( "C:/arquivos.zip" );

Também poderiamos ter usado o mesmo comando com o construtor vazio, e em seguida ter utilizado o comando Read, porém utilizamos menos espaço na memória por optar pela primeira opção.

Com todos os arquivos armazenados na variável $zip, nos resta apenas chamar a função que transformará estes dados em arquivos. Esta é a extractTree( ).

A função extractTree( ) nos permite definir três parâmetros, sendo estes opcionais. O primeiro parâmetro determina que se extrairá apenas as pastas que, em seus nomes, tiverem os caracteres que forem definidos nele. O segundo parâmetro apenas altera, no nome do arquivo, os caracteres definidos como necessários por quaisquer outros.

Estes dois parâmetros iniciais não traremos a atenção, a não ser o terceiro parâmetro que é onde definiremos o local onde os arquivos extraídos serão colocados.

$zip->extractTree(",","C:/arquivos/");

Fim. E você não acreditou que com dois comandos o Perl iria realizar esta proeza?

CitarVeja o Código Completo:
(zip-exemplo2.pl)

    #!/usr/bin/perl
    use Archive::Zip;

    $arquivo="C:/arquivos.zip";  # Arquivo compactado
    $saida   = "C:/arquivos/";       # Pasta de saída

    my $zip = new Archive::Zip($arquivo); # Abre o arquivo
    die "Erro ao Gravar" unless $zip->extractTree( ' ' , ' ' , $saida ) == AZ_OK;
    # Extrai os dados a menos que encontre algum erro


Fonte: http://perlpoint.wordpress.com
Com um punhado de areia eu mostrarei o terror à vocês.