Comment vérifier si un fichier existe ou non, sans utiliser l' try
instruction?
la source
Comment vérifier si un fichier existe ou non, sans utiliser l' try
instruction?
Si la raison pour laquelle vous vérifiez est que vous pouvez faire quelque chose comme if file_exists: open_it()
, il est plus sûr d'utiliser un try
autour pour tenter de l'ouvrir. La vérification puis l'ouverture risquent de supprimer ou de déplacer le fichier ou quelque chose entre le moment où vous vérifiez et le moment où vous essayez de l'ouvrir.
Si vous ne prévoyez pas d'ouvrir le fichier immédiatement, vous pouvez utiliser os.path.isfile
Renvoie
True
si le chemin est un fichier standard existant. Cela suit les liens symboliques, donc islink () et isfile () peuvent être vrais pour le même chemin.
import os.path
os.path.isfile(fname)
si vous devez être sûr que c'est un fichier.
À partir de Python 3.4, le pathlib
module propose une approche orientée objet (rétroportée pathlib2
en Python 2.7):
from pathlib import Path
my_file = Path("/path/to/file")
if my_file.is_file():
# file exists
Pour vérifier un répertoire, procédez comme suit:
if my_file.is_dir():
# directory exists
Pour vérifier si un Path
objet existe indépendamment du fait qu'il s'agisse d'un fichier ou d'un répertoire, utilisez exists()
:
if my_file.exists():
# path exists
Vous pouvez également utiliser resolve(strict=True)
dans un try
bloc:
try:
my_abs_path = my_file.resolve(strict=True)
except FileNotFoundError:
# doesn't exist
else:
# exists
FileNotFoundError
été introduit dans Python 3. Si vous devez également prendre en charge Python 2.7 ainsi que Python 3, vous pouvez utiliser à laIOError
place (quellesFileNotFoundError
sous-classes) stackoverflow.com/a/21368457/1960959open('file', 'r+')
) puis rechercher jusqu'à la fin.Vous avez la
os.path.exists
fonction:Cela renvoie
True
à la fois pour les fichiers et les répertoires mais vous pouvez utiliser à la placepour tester si c'est un fichier en particulier. Il suit les liens symboliques.
la source
Contrairement
isfile()
,exists()
reviendraTrue
pour les répertoires. Donc, selon que vous souhaitez uniquement des fichiers simples ou également des répertoires, vous utiliserezisfile()
ouexists()
. Voici une sortie REPL simple:la source
la source
Utiliser
os.path.isfile()
avecos.access()
:la source
os.access()
renvoie false.import os
, vous n'en avez plus besoinimport os.path
car il en fait déjà partieos
. Vous avez juste besoin d'importeros.path
si vous n'utilisez que des fonctions depuisos.path
et non deos
lui-même, pour importer une chose plus petite, mais comme vous utilisezos.access
etos.R_OK
, la deuxième importation n'est pas nécessaire.la source
Bien que presque toutes les manières possibles aient été répertoriées dans (au moins une des) réponses existantes (par exemple, des éléments spécifiques à Python 3.4 ont été ajoutés), je vais essayer de tout regrouper.
Remarque : chaque morceau de code de bibliothèque standard Python que je vais publier appartient à la version 3.5.3 .
Énoncé du problème :
Solutions possibles :
[Python 3]: os.path. EXISTE ( chemin ) (vérifier également d' autres membres de la famille des fonctions comme
os.path.isfile
,os.path.isdir
,os.path.lexists
des comportements légèrement différents)Tout va bien, mais si vous suivez l'arborescence d'importation:
os.path
- posixpath.py ( ntpath.py )genericpath.py , ligne ~ # 20 +
c'est juste un bloc try / except autour de [Python 3]: os. stat ( path, *, dir_fd = None, follow_symlinks = True ) . Donc, votre code est try / except free, mais plus bas dans la framestack il y a (au moins) un tel bloc. Cela s'applique également à d'autres fonctions ( y compris
os.path.isfile
).1.1. [Python 3]: Chemin. is_file ()
Sous le capot, il fait exactement la même chose ( pathlib.py , ligne ~ # 1330 ):
[Python 3]: avec les gestionnaires de contexte d'instruction . Soit:
Créer une:
Et son utilisation - je vais reproduire le
os.path.isfile
comportement (notez que c'est juste à des fins de démonstration, n'essayez pas d'écrire un tel code pour la production ):Utilisez [Python 3]: contextlib. supprimer ( * exceptions ) - qui a été spécialement conçu pour supprimer sélectivement les exceptions
Mais, ils semblent être des wrappers sur les blocs try / except / else / finally , comme [Python 3]: L' instruction with indique:
Fonctions de traversée du système de fichiers (et recherchez les éléments correspondants dans les résultats)
[Python 3]: os. listdir ( path = '.' ) (ou [Python 3]: os. scandir ( path = '.' ) sur Python v 3.5 +, backport: [PyPI]: scandir )
Sous le capot, les deux utilisent:
via [GitHub]: python / cpython - (maître) cpython / Modules / posixmodule.c
os.listdir
(os.scandir
si disponible)glob.glob
)os.listdir
Étant donné que ces itérations sur les dossiers, (dans la plupart des cas), elles sont inefficaces pour notre problème (il existe des exceptions, comme le glob bing non générique - comme l'a souligné @ShadowRanger), donc je ne vais pas insister sur eux. Sans oublier que dans certains cas, le traitement des noms de fichiers peut être requis.
[Python 3]: os. access ( path, mode, *, dir_fd = None, effective_ids = False, follow_symlinks = True ) dont le comportement est proche
os.path.exists
(en fait, il est plus large, principalement à cause du 2 ème argument)os.access("/tmp", os.F_OK)
Depuis que je aussi travailler en C , j'utilise cette méthode ainsi que sous le capot, il appelle native API s (encore une fois, par « $ {} PYTHON_SRC_DIR /Modules/posixmodule.c » ), mais il ouvre aussi une porte pour un éventuel utilisateur erreurs , et ce n'est pas aussi Python ic que les autres variantes. Donc, comme @AaronHall l'a souligné à juste titre, ne l'utilisez que si vous savez ce que vous faites:
Remarque : appeler des API natives est également possible via [Python 3]: ctypes - Une bibliothèque de fonctions étrangères pour Python , mais dans la plupart des cas, c'est plus compliqué.
( Spécifique à Win ): Étant donné que vcruntime * ( msvcr * ) .dll exporte également une famille de fonctions [MS.Docs]: _access, _waccess , voici un exemple:
Remarques :
os.F_OK
dans l'appel, mais c'est juste pour plus de clarté (sa valeur est 0 )La contrepartie Lnx ( Ubtu (16 x64) ) également:
Remarques :
Au lieu de cela, codez en dur le chemin de libc ( "/lib/x86_64-linux-gnu/libc.so.6" ) qui peut (et très probablement, variera) d'un système à l'autre, Aucun (ou la chaîne vide) peut être transmis au constructeur CDLL (
ctypes.CDLL(None).access(b"/tmp", os.F_OK)
). Selon [man7]: DLOPEN (3) :__declspec(dllexport)
(pourquoi diable la personne ordinaire ferait ça?), le programme principal est chargeable mais quasiment inutilisableInstaller un module tiers avec des capacités de système de fichiers
Très probablement, s'appuiera sur l'une des méthodes ci-dessus (peut-être avec de légères personnalisations).
Un exemple serait (encore une fois, spécifique à Win ) [GitHub]: mhammond / pywin32 - Extensions Python pour Windows (pywin32) , qui est un wrapper Python sur les WINAPI .
Mais, puisque cela ressemble plus à une solution de contournement, je m'arrête ici.
Une autre solution (boiteuse) ( gainarie ) est (comme j'aime l'appeler) l' approche sysadmin : utiliser Python comme wrapper pour exécuter des commandes shell
Gagner :
Nix ( Lnx ( Ubtu )):
Conclusion :
Note (s) finale (s) :
la source
glob.iglob
(etglob.glob
aussi) sont basés suros.scandir
, donc c'est paresseux maintenant; pour obtenir le premier hit dans un répertoire de 10 millions de fichiers, vous scannez uniquement jusqu'à ce que vous atteigniez le premier hit. Et même avant la version 3.6, si vous utilisez desglob
méthodes sans caractères génériques, la fonction est intelligente: elle sait que vous ne pouvez avoir qu'un seul hit, ce qui simplifie le globbing à justeos.path.isdir
ouos.path.lexists
(selon que le chemin se termine/
).os.path.isdir
ouos.path.lexist
puisqu'il s'agit d'un groupe d'appels de fonction de niveau Python et d'une chaîne avant de décider que le chemin efficace est viable, mais aucun appel système supplémentaire ni travail d'E / S, ce qui est beaucoup plus lent).C'est le moyen le plus simple de vérifier si un fichier existe. Le fait que le fichier existait lorsque vous avez vérifié ne garantit pas qu'il sera là lorsque vous aurez besoin de l'ouvrir.
la source
Python 3.4+ possède un module de chemin orienté objet: pathlib . En utilisant ce nouveau module, vous pouvez vérifier si un fichier existe comme ceci:
Vous pouvez (et devez généralement) toujours utiliser un
try/except
bloc lors de l'ouverture de fichiers:Le module pathlib contient beaucoup de choses intéressantes: globbing pratique, vérification du propriétaire du fichier, jointure de chemin plus facile, etc. Cela vaut la peine d'être vérifié. Si vous utilisez un ancien Python (version 2.6 ou ultérieure), vous pouvez toujours installer pathlib avec pip:
Importez-le ensuite comme suit:
la source
Préférez l'instruction try. Il est considéré comme un meilleur style et évite les conditions de course.
Ne me croyez pas sur parole. Il y a beaucoup de soutien pour cette théorie. En voici deux:
la source
try...except
ne permet pas de résoudre ce problème de toute façon.except:
clause fera qu'une exception apparaissant dans cette partie de votre code lèvera un message déroutant (deuxième erreur levée pendant le traitement du premier.)Désormais disponible depuis Python 3.4, importez et instanciez un
Path
objet avec le nom de fichier, et vérifiez lais_file
méthode (notez que cela renvoie True pour les liens symboliques pointant également vers des fichiers normaux):Si vous êtes sur Python 2, vous pouvez rétroporter le module pathlib à partir de pypi
pathlib2
, ou sinon vérifier àisfile
partir duos.path
module:Maintenant, ce qui précède est probablement la meilleure réponse directe pragmatique ici, mais il y a la possibilité d'une condition de concurrence (en fonction de ce que vous essayez d'accomplir) et du fait que l'implémentation sous-jacente utilise un
try
, mais Python utilisetry
partout dans son implémentation.Parce que Python utilise
try
partout, il n'y a vraiment aucune raison d'éviter une implémentation qui l'utilise.Mais le reste de cette réponse tente de tenir compte de ces mises en garde.
Réponse plus longue et beaucoup plus pédante
Disponible depuis Python 3.4, utilisez le nouvel
Path
objet danspathlib
. Notez que ce.exists
n'est pas tout à fait raison, car les répertoires ne sont pas des fichiers (sauf dans le sens unix que tout est un fichier).Nous devons donc utiliser
is_file
:Voici l'aide sur
is_file
:Alors, obtenons un fichier que nous savons être un fichier:
Par défaut,
NamedTemporaryFile
supprime le fichier lorsqu'il est fermé (et se fermera automatiquement lorsqu'il n'y aura plus de références).Si vous creusez dans l'implémentation , vous verrez que cela
is_file
utilisetry
:Conditions de course: pourquoi nous aimons essayer
On aime
try
parce que ça évite les conditions de course. Avectry
, vous essayez simplement de lire votre fichier, en vous attendant à ce qu'il soit là, et sinon, vous interceptez l'exception et effectuez le comportement de secours qui a du sens.Si vous souhaitez vérifier qu'un fichier existe avant d'essayer de le lire, que vous le supprimiez et que vous utilisiez plusieurs threads ou processus, ou qu'un autre programme connaisse ce fichier et puisse le supprimer - vous risquez de une condition de course si vous vérifiez qu'elle existe, car vous êtes alors en course pour l'ouvrir avant que sa condition (son existence) ne change.
Les conditions de concurrence sont très difficiles à déboguer car il existe une très petite fenêtre dans laquelle elles peuvent entraîner l'échec de votre programme.
Mais si telle est votre motivation, vous pouvez obtenir la valeur d'une
try
déclaration en utilisant lesuppress
gestionnaire de contexte.Éviter les conditions de course sans déclaration d'essai:
suppress
Python 3.4 nous donne le
suppress
gestionnaire de contexte (anciennement leignore
gestionnaire de contexte), qui fait sémantiquement exactement la même chose en moins de lignes, tout en répondant (au moins superficiellement) à la demande d'origine pour éviter unetry
déclaration:Usage:
Pour les Pythons antérieurs, vous pouvez lancer le vôtre
suppress
, mais sanstry
volonté sera plus verbeux qu'avec. Je crois que c'est en fait la seule réponse qui n'utilisetry
à aucun niveau dans Python qui peut être appliquée avant Python 3.4 car elle utilise un gestionnaire de contexte à la place:Peut-être plus facile avec un essai:
Autres options qui ne répondent pas à la demande «sans essayer»:
isfile
à partir des documents :
Mais si vous examinez la source de cette fonction, vous verrez qu'elle utilise en fait une instruction try:
Tout ce qu'il fait, c'est utiliser le chemin donné pour voir s'il peut obtenir des statistiques dessus, attraper
OSError
puis vérifier s'il s'agit d'un fichier s'il n'a pas levé l'exception.Si vous avez l'intention de faire quelque chose avec le fichier, je vous suggère d'essayer directement avec un essai, sauf pour éviter une condition de concurrence:
os.access
Disponible pour Unix et Windows
os.access
, mais pour l'utiliser, vous devez passer des drapeaux et cela ne fait pas de différence entre les fichiers et les répertoires. Ceci est plus utilisé pour tester si le véritable utilisateur appelant a accès dans un environnement à privilèges élevés:Il souffre également des mêmes problèmes de condition de course que
isfile
. De la documentation :Évitez d'utiliser
os.access
. Il s'agit d'une fonction de bas niveau qui présente plus de possibilités d'erreur utilisateur que les objets et fonctions de niveau supérieur décrits ci-dessus.Critique d'une autre réponse:
Une autre réponse dit ceci à propos de
os.access
:Cette réponse indique qu'elle préfère une méthode non pythonique, sujette aux erreurs, sans justification. Il semble encourager les utilisateurs à utiliser des API de bas niveau sans les comprendre.
Il crée également un gestionnaire de contexte qui, en retournant sans condition
True
, permet à toutes les exceptions (y comprisKeyboardInterrupt
etSystemExit
!) De passer silencieusement, ce qui est un bon moyen de masquer les bogues.Cela semble encourager les utilisateurs à adopter de mauvaises pratiques.
la source
L'importation
os
facilite la navigation et l'exécution d'actions standard avec votre système d'exploitation.Pour référence, voir également Comment vérifier si un fichier existe en utilisant Python?
Si vous avez besoin d'opérations de haut niveau, utilisez
shutil
.la source
os.path.exists
renvoie true pour les éléments qui ne sont pas des fichiers, tels que les répertoires. Cela donne des faux positifs. Voir les autres réponses qui recommandentos.path.isfile
.Test des fichiers et des dossiers avec
os.path.isfile()
,os.path.isdir()
etos.path.exists()
En supposant que le «chemin» est un chemin valide, ce tableau montre ce qui est retourné par chaque fonction pour les fichiers et les dossiers:
Vous pouvez également tester si un fichier est un certain type de fichier en utilisant
os.path.splitext()
pour obtenir l'extension (si vous ne le connaissez pas déjà)la source
En 2016, le meilleur moyen est toujours d'utiliser
os.path.isfile
:Ou en Python 3, vous pouvez utiliser
pathlib
:la source
pathlib
est la solution OOP de python pour les chemins. Vous pouvez en faire beaucoup plus. Si vous avez juste besoin de vérifier l'existence, l'avantage n'est pas si grand.Il ne semble pas y avoir de différence fonctionnelle significative entre try / except et
isfile()
, vous devez donc utiliser celle qui a du sens.Si vous souhaitez lire un fichier, s'il existe, faites
Mais si vous voulez simplement renommer un fichier s'il existe et que vous n'avez donc pas besoin de l'ouvrir, faites
Si vous voulez écrire dans un fichier, s'il n'existe pas, faites
Si vous avez besoin d'un verrouillage de fichier, c'est une autre affaire.
la source
os.path.exists
renvoie true pour les éléments qui ne sont pas des fichiers, tels que les répertoires. Cela donne des faux positifs. Voir les autres réponses qui recommandentos.path.isfile
.filepath
avec le bon timing, et BAM , vous écrasez le fichier cible. Vous devriez le faireopen(filepath, 'wx')
dans untry...except
bloc pour éviter le problème.OSError
sifilepath + '.old'
existe déjà: "Sous Windows, si dst existe déjà, OSError sera déclenchée même s'il s'agit d'un fichier; il n'y a peut-être aucun moyen d'implémenter un renom atomique lorsque dst nomme un fichier existant. "os.replace
effectue de manière portative le remplacement silencieux du fichier de destination (il est identique auos.rename
comportement de Linux) (il ne fait d'erreur que si le nom de destination existe et est un répertoire). Vous êtes donc bloqué sur 2.x, mais les utilisateurs de Py3 ont une bonne option depuis plusieurs années maintenant.rename
exemple: Cela devrait toujours être fait avectry
/except
.os.rename
(ouos.replace
sur Python moderne) est atomique; le faire vérifier puis renommer introduit une course inutile et des appels système supplémentaires.try: os.replace(filepath, filepath + '.old') except OSError: pass
Vous pouvez essayer ceci (plus sûr):
Le résultat serait:
Ensuite, selon le résultat, votre programme peut simplement continuer à fonctionner à partir de là ou vous pouvez coder pour l'arrêter si vous le souhaitez.
la source
try
Bien que je recommande toujours d'utiliser les instructions
try
etexcept
, voici quelques possibilités pour vous (mon préféré est d'utiliseros.access
):Essayez d'ouvrir le fichier:
L'ouverture du fichier vérifiera toujours l'existence du fichier. Vous pouvez créer une fonction comme ceci:
S'il est faux, il arrêtera l'exécution avec une erreur IOError ou OSError non gérée dans les versions ultérieures de Python. Pour intercepter l'exception, vous devez utiliser une clause try except. Bien sûr, vous pouvez toujours utiliser une
try
instruction except comme ceci (merci à hsandt de m'avoir fait réfléchir):Utilisation
os.path.exists(path)
:Cela vérifiera l'existence de ce que vous spécifiez. Cependant, il vérifie les fichiers et les répertoires, alors faites attention à la façon dont vous les utilisez.
Utilisation
os.access(path, mode)
:Cela vérifiera si vous avez accès au fichier. Il vérifiera les autorisations. Sur la base de la documentation os.py, en tapant
os.F_OK
, il vérifiera l'existence du chemin. Cependant, son utilisation créera une faille de sécurité, car quelqu'un peut attaquer votre fichier en utilisant le temps entre la vérification des autorisations et l'ouverture du fichier. Vous devriez plutôt aller directement à l'ouverture du fichier au lieu de vérifier ses autorisations. ( EAFP contre LBYP ). Si vous n'ouvrez pas le fichier par la suite et ne vérifiez que son existence, vous pouvez l'utiliser.Bref, ici:
Je dois également mentionner qu'il existe deux manières de ne pas pouvoir vérifier l'existence d'un fichier. Soit le problème sera
permission denied
ouno such file or directory
. Si vous attrapez unIOError
, définissez leIOError as e
(comme ma première option), puis saisissez-leprint(e.args)
afin que vous puissiez, espérons-le, déterminer votre problème. J'espère que ça aide! :)la source
Date: 2017-12-04
Chaque solution possible a été répertoriée dans d'autres réponses.
Un moyen intuitif et discutable de vérifier si un fichier existe est le suivant:
J'ai fait une feuille de triche exhaustive pour votre référence:
la source
Si le fichier est destiné à être ouvert, vous pouvez utiliser l'une des techniques suivantes:
MISE À JOUR
Juste pour éviter toute confusion et sur la base des réponses que j'ai obtenues, la réponse actuelle trouve soit un fichier soit un répertoire avec le nom donné.
la source
os.path.exists
renvoie true pour les éléments qui ne sont pas des fichiers, tels que les répertoires. Cela donne des faux positifs. Voir les autres réponses qui recommandentos.path.isfile
.Aditionellement,
os.access()
:Être
R_OK
,W_OK
etX_OK
les drapeaux pour tester les autorisations ( doc ).la source
SRC: http://www.pfinn.net/python-check-if-file-exists.html
la source
Si vous avez importé NumPy déjà à d' autres fins alors il n'y a pas besoin d'importer d' autres bibliothèques comme
pathlib
,os
,paths
, etc.Cela retournera vrai ou faux en fonction de son existence.
la source
Vous pouvez écrire la suggestion de Brian sans le
try:
.suppress
fait partie de Python 3.4. Dans les versions plus anciennes, vous pouvez rapidement écrire votre propre suppression:la source
Je suis l'auteur d'un paquet qui existe depuis environ 10 ans, et il a une fonction qui répond directement à cette question. Fondamentalement, si vous êtes sur un système non Windows, il utilise
Popen
pour y accéderfind
. Cependant, si vous êtes sous Windows, il se répliquefind
avec un marcheur de système de fichiers efficace.Le code lui-même n'utilise pas de
try
bloc… sauf pour déterminer le système d'exploitation et ainsi vous diriger vers le style "Unix"find
ou le hand-builltfind
. Les tests de synchronisation ont montré qu'iltry
était plus rapide de déterminer le système d'exploitation, donc j'en ai utilisé un là-bas (mais nulle part ailleurs).Et le doc…
L'implémentation, si vous voulez regarder, est ici: https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190
la source
Vérifier que le fichier ou le répertoire existe
Vous pouvez suivre ces trois façons:
la source
Ajout d'une autre légère variation qui ne se reflète pas exactement dans les autres réponses.
Cela gérera le cas de l'
file_path
êtreNone
ou de la chaîne vide.Ajout d'une variante basée sur une suggestion de Shahbaz
Ajout d'une variante basée sur une suggestion de Peter Wood
la source
if (x) return true; else return false;
est vraiment justereturn x
. Vos quatre dernières lignes peuvent devenirreturn os.path.isfile(file_path)
. Pendant que nous y sommes, la fonction entière peut être simplifiée commereturn file_path and os.path.isfile(file_path)
.return x
dans le cas deif (x)
. Python considérera une chaîne vide comme Faux, auquel cas nous retournerions une chaîne vide au lieu d'un booléen. Le but de cette fonction est de toujours renvoyer bool.x
c'estos.path.isfile(..)
donc déjà booléen.os.path.isfile(None)
soulève une exception, c'est pourquoi j'ai ajouté le chèque if. Je pourrais probablement l'envelopper dans un essai / sauf à la place, mais je pensais que c'était plus explicite de cette façon.return file_path and os.path.isfile(file_path)
Voici une commande Python 1 ligne pour l'environnement de ligne de commande Linux. Je trouve cela TRÈS PRATIQUE car je ne suis pas un gars Bash si chaud.
J'espère que ceci est utile.
la source
[ -f "${file}" ] && echo "file found" || echo "file not found"
(qui est identique àif [ ... ]; then ...; else ...; fi
).Vous pouvez utiliser la bibliothèque "OS" de Python:
la source
os.path.exists
renvoie true pour les éléments qui ne sont pas des fichiers, tels que les répertoires. Cela donne des faux positifs. Voir les autres réponses qui recommandentos.path.isfile
.exists
va bien. Si le but est de déterminer s'il est sûr d'ouvrir un fichier vraisemblablement existant, alors la critique est justifiée et existe n'est pas assez précise. Malheureusement, l'OP ne précise pas quel est l'objectif souhaité (et ne le fera probablement plus).En 2016, c'est sans doute la façon la plus simple de vérifier si un fichier existe et s'il s'agit d'un fichier:
isfile
est en fait juste une méthode d'aide qui utilise en interneos.stat
et enstat.S_ISREG(mode)
dessous. Ilos.stat
s'agit d'une méthode de niveau inférieur qui vous fournira des informations détaillées sur les fichiers, les répertoires, les sockets, les tampons, etc. En savoir plus sur os.stat iciRemarque: Cependant, cette approche ne verrouillera pas le fichier en aucune façon et donc votre code peut devenir vulnérable au " moment de la vérification au moment de l'utilisation " ( TOCTTOU bogues ).
Donc, lever des exceptions est considéré comme une approche acceptable et Pythonique pour le contrôle de flux dans votre programme. Et on devrait envisager de gérer les fichiers manquants avec IOErrors, plutôt que des
if
instructions ( juste un conseil ).la source
la source
isReadableFile(path,fileName)
retourneraTrue
si le fichier est accessible et lisible par le processus \ program \ thread