119 votes

Comment puis-je vérifier si un fichier existe en Perl?

J'ai un chemin relatif

    $base_path = "input/myMock.TGZ";
 

myMock.TGZ est le nom du fichier situé dans le dossier d'entrée. Le nom de fichier peut changer. Mais le chemin est toujours stocké dans $base_path .

Je dois vérifier si le fichier existe dans $base_path .

189voto

Greg Bacon Points 50449

Tester si quelque chose existe au chemin d'accès donné à l'aide de l' -e le fichier de test de l'opérateur.

print "$base_path exists!\n" if -e $base_path;

Toutefois, ce test est probablement plus large que vous le souhaitez. Le code ci-dessus va générer de sortie si un simple fichier existe à ce chemin, mais il permettra également d'incendie pour un répertoire, un nom de pipe, un lien symbolique, ou plus exotique possibilité. Voir la documentation pour plus de détails.

Compte tenu de l'extension de l' .TGZ dans votre question, il semble que vous vous attendez à un fichier brut plutôt que les solutions de rechange. L' -f le fichier de test de l'opérateur demande si un chemin mène à un fichier brut.

print "$base_path is a plain file!\n" if -f $base_path;

Le perlfunc documentation couvre la longue liste de Perl dans le fichier de test opérateurs:

30voto

hpavc Points 930

Vous voudrez peut-être une variante de existe ... perldoc -f "-f"

       -X FILEHANDLE
       -X EXPR
       -X DIRHANDLE
       -X      A file test, where X is one of the letters listed below.  This unary operator takes one argument,
               either a filename, a filehandle, or a dirhandle, and tests the associated file to see if something is
               true about it.  If the argument is omitted, tests $_, except for "-t", which tests STDIN.  Unless
               otherwise documented, it returns 1 for true and '' for false, or the undefined value if the file
               doesn't exist.  Despite the funny names, precedence is the same as any other named unary operator.
               The operator may be any of:

                   -r  File is readable by effective uid/gid.
                   -w  File is writable by effective uid/gid.
                   -x  File is executable by effective uid/gid.
                   -o  File is owned by effective uid.

                   -R  File is readable by real uid/gid.
                   -W  File is writable by real uid/gid.
                   -X  File is executable by real uid/gid.
                   -O  File is owned by real uid.

                   -e  File exists.
                   -z  File has zero size (is empty).
                   -s  File has nonzero size (returns size in bytes).

                   -f  File is a plain file.
                   -d  File is a directory.
                   -l  File is a symbolic link.
                   -p  File is a named pipe (FIFO), or Filehandle is a pipe.
                   -S  File is a socket.
                   -b  File is a block special file.
                   -c  File is a character special file.
                   -t  Filehandle is opened to a tty.

                   -u  File has setuid bit set.
                   -g  File has setgid bit set.
                   -k  File has sticky bit set.

                   -T  File is an ASCII text file (heuristic guess).
                   -B  File is a "binary" file (opposite of -T).

                   -M  Script start time minus file modification time, in days.
 

20voto

mdm Points 7651
 if (-e $base_path)
{ 
 # code
}
 

-e est l'opérateur 'existence' en Perl.

Vous pouvez vérifier les autorisations et autres attributs en utilisant le code sur cette page .

14voto

Vous pouvez utiliser: if(-e $base_path)

13voto

Zain R Points 4181

Utilisation:

 if (-f $filePath)
{
  # code
}
 

-e renvoie true même si le fichier est un répertoire. -f ne retournera vrai que s'il s'agit d'un fichier réel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X