Bonjour,
Je cherche à appliquer un programme à tous les fichiers d'un même dossier. En lisant les discussions du forum(cf petitange_lili, boucle analyser tous les fichiers d'un répertoire), j'ai vu qu'il existait la fonction opendir/readdir/closedir. Malheureusement quand je l'intègre à mon programme, l'ouverture des fichiers m'est interdite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #!/usr/bin/perl use strict; use warnings; my $dossier = "mars"; opendir (DIR, $dossier) or die "$dossier n'existe pas !"; my @files = readdir DIR; foreach my $nom_fichier_source (@files){ # Ci-dessous les lignes utilisees dans le programme de base # pour traiter les fichiers un a un : #print "Donnez le nom du fichier :\n"; #my $nom_fichier_source = <STDIN>; #chomp($nom_fichier_source); my $nom_tronque = $nom_fichier_source; $nom_tronque =~ s/\.log//; my $nom_fichier_resultat = "$nom_tronque"."_resultat_sauv.txt"; open my ($source), '<', $nom_fichier_source or die "Impossible d'ouvrir votre fichier $nom_fichier_source : $!\n "; open my ($destination), '>', $nom_fichier_resultat or die "Impossible d'ouvrir votre fichier $nom_fichier_resultat : $!\n "; print $destination "Etablissement\tNb total fich\tNb fich modif\n"; # "variables d'état" my ($etab, $total_fic, $fic_modif) = (undef, "0\t", "0"); my $compteur = 0; while (my $ligne=<$source>){ # mon programme à proprement parler } close $source; close $destination; } closedir DIR;
Par ailleurs, pour comprendre la fonction, j'ai testé le programme proposé en FAQ "Handle de répertoire". Mais ce programme me rend le résultat 0 fichiers, 2 répertoires, alors qu'il devrait répondre 20 fichiers (documents texte, .log) et 0 répretoires.
Merci pour vos conseils.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #!/usr/bin/perl $nbrep = 0; $nbfic = 0; $dossier = "mars"; opendir DIR, $dossier or die "$dossier n'existe pas !"; @files = readdir DIR; foreach $fichier (@files) { if (-f $fichier) { $nbfic++; } elsif (-d $fichier) { $nbrep++; } } close DIR; print "Il y a $nbfic fichier(s) et $nbrep répertoire(s) dans $dossier.\n";
Partager