OVH Cloud OVH Cloud

gestion des erreurs...

3 réponses
Avatar
kurtz_le_pirate
bonjour.

je suis en train de prototyper une appli :
---------------------------------------------------------------------------
#!/usr/local/bin/perl

use strict;
doTheJob('O:\Loc');
exit;

sub doTheJob {
my $dir = shift;
opendir(thisDir, $dir);
my @allDirs = readdir(thisDir);
closedir(thisDir);

foreach my $file (@allDirs) {
my $filename = $dir . '/' . $file;
if ($file eq '.' || $file eq '..'){
}
elsif (-d $filename) {
print "\n\n$filename :\n";
$filename=$filename.'\Application Data\ICAClient\pn.ini';
open (fileRef,$filename) || die "error for $filename: $!/n";
while( my $fileLine=<fileRef>) { print $fileLine; }
close fileRef;
}
}
}
----------------------------------------------------------------------------

mon problème c'est que je ne sais pas traité le cas ou le fichier
chercher n'existe pas : open (fileRef,$filename) || die "error for
$filename: $!/n";
le script s'arrete. c'est normal j'ai mis un 'die'.

mais comment faire pour continuer le traitement sur les autres
fichiers ?
merci

3 réponses

Avatar
Sébastien Cottalorda
bonjour.

je suis en train de prototyper une appli :
---------------------------------------------------------------------------
#!/usr/local/bin/perl

use strict;
doTheJob('O:Loc');
exit;

sub doTheJob {
my $dir = shift;
opendir(thisDir, $dir);
my @allDirs = readdir(thisDir);
closedir(thisDir);

foreach my $file (@allDirs) {
my $filename = $dir . '/' . $file;
if ($file eq '.' || $file eq '..'){
}
elsif (-d $filename) {
print "nn$filename :n";
$filename=$filename.'Application DataICAClientpn.ini';
open (fileRef,$filename) || die "error for $filename: $!/n";
while( my $fileLine=<fileRef>) {
print $fileLine;
}
close fileRef;
}
}
}
----------------------------------------------------------------------------

mon problème c'est que je ne sais pas traité le cas ou le fichier
chercher n'existe pas : open (fileRef,$filename) || die "error for
$filename: $!/n";
le script s'arrete. c'est normal j'ai mis un 'die'.

mais comment faire pour continuer le traitement sur les autres
fichiers ?
merci


Salut,

Remplace:
open (fileRef,$filename) || die "error for $filename: $!/n";

par:
unless (open (fileRef,$filename)) {
print error for $filename: $!/n";
next;
}

ou bien par:
next unless (-e $filename);


Voilà.

Sébastien

Avatar
kurtz_le_pirate
"Sébastien Cottalorda" a écrit dans le
message de news: 439955fb$0$7358$
bonjour.

je suis en train de prototyper une appli :
---------------------------------------------------------------------------
#!/usr/local/bin/perl

use strict;
doTheJob('O:Loc');
exit;

sub doTheJob {
my $dir = shift;
opendir(thisDir, $dir);
my @allDirs = readdir(thisDir);
closedir(thisDir);

foreach my $file (@allDirs) {
my $filename = $dir . '/' . $file;
if ($file eq '.' || $file eq '..'){
}
elsif (-d $filename) {
print "nn$filename :n";
$filename=$filename.'Application DataICAClientpn.ini';
open (fileRef,$filename) || die "error for $filename:
$!/n";
while( my $fileLine=<fileRef>) {
print $fileLine;
}
close fileRef;
}
}
}
----------------------------------------------------------------------------

mon problème c'est que je ne sais pas traité le cas ou le fichier
chercher n'existe pas : open (fileRef,$filename) || die "error for
$filename: $!/n";
le script s'arrete. c'est normal j'ai mis un 'die'.

mais comment faire pour continuer le traitement sur les autres
fichiers ?
merci


Salut,

Remplace:
open (fileRef,$filename) || die "error for $filename: $!/n";

par:
unless (open (fileRef,$filename)) {
print error for $filename: $!/n";
next;
}

ou bien par:
next unless (-e $filename);


Voilà.

Sébastien



merci... mais je ne suis variment pas réveillé ce matin.
en fait j'ai juste fait :
open (fileRef,$filename) || print "n*** error for $filename:
$!nn";


a+


Avatar
DoMinix
kurtz_le_pirate wrote:
bonjour.

'lut

...
mon problème c'est que je ne sais pas traité le cas ou le fichier
chercher n'existe pas : open (fileRef,$filename) || die "error for
$filename: $!/n";
le script s'arrete. c'est normal j'ai mis un 'die'.



note qu'avec open il est preconisé d'utiliser "or" plutot que "||"
open ... or die ...
mais bon, ca le fait quand meme

mais comment faire pour continuer le traitement sur les autres
fichiers ?
merci



avec un eval ou un test sur open ?

--
dominix