Categoria Dicas CGI/Perl - Lendo Diretórios

Posted by webmaster | CGI/Perl |

Como a primeira matéria/dica em CGI-Perl, irei ensinar hoje a como ler diretórios e abrir arquivos nos mesmos.

O código é simples, segue:

opendir (MEUDIR, “/home/LOGIN/www/meudir”);
@pegoodir = readdir(MEUDIR);
closedir (MEUDIR);

Explicando o código:

- opendir (MEUDIR, “/home/LOGIN/www/meudir”);
- Este código abre o diretório especificado

- @pegoodir = readdir(MEUDIR);
- Neste, coloco todos os arquivos do diretório em um vetor (o @pegoodir é um vetor).

- closedir (MEUDIR);
- Encerro a leitura do diretório

1. Lendo os arquivos do diretório e imprimindo seus dados

Irei utilizar o comando foreach para pegar os nomes dos arquivos no vetor e abrí-los.

A seguir o código e a explicação da utilização parte a parte.

#!/usr/bin/perl

print “Content-type: text/html\n\n”; # Digo ao script o conteúdo do documento

# abro o diretório
opendir (MEUDIR, “/home/LOGIN/www/meudir”);
@pegoodir = readdir(MEUDIR);
closedir (MEUDIR);
# já peguei todos os dados e armazenei no vetor, fecho o diretório

foreach (@pegoodir) {
$dados = $_; # como só existe uma coluna no vetor, utilizei o $_ para pegar esta coluna.

if ($dados eq “.”) { next; } #prossigo se o nome do arquivo for só . (ver explicação abaixo)
if ($dados eq “..”) { next; } #prossigo se o nome do arquivo for só ..

open (MEUFILE, “/home/LOGIN/www/meudir/$dados”);
@minhas_linhas = <MEUFILE>;
close (MEUFILE);

print “<b>Arquivo $dados</b>: @minhas_linhas

“; # imprimo os arquivos do diretório.

} # fecho o foreach
Agora explicando o comando:

if ($dados eq “.”) { next; } #prossigo se o nome do arquivo for só .
if ($dados eq “..”) { next; } #prossigo se o nome do arquivo for só ..

Um diretório é formado pela seguinte sequencia:
. # este significa a volta a pasta raiz
.. # este volta para a pasta anterior
a # pasta de nome a
b # pasta de nome b
c # pasta de nome c
a.EXT # arquivo a.ext
b.EXT # arquivo b.ext
c.EXT # arquivo c.ext
Utilizei o código porque, sem ele, o script intenderá o dado “.” e “..” como arquivos e irá abrí-los, demorando na execução do sistema.

Inserindo este comando next; , pulo para a próxima ação, excluindo a atual.

Tags:

Nenhum Comentário

Nenhum comentário ainda.

Feed RSS dos comentários deste post TrackBack URI

O formulário de comentários está fechado no momento.