Les systèmes de fichiers sont volatiles. Cela signifie que vous ne pouvez pas faire confiance à la suite d'une opération, pour être encore valide pour le prochain, même si c'est la ligne de code suivante. Vous ne pouvez pas dire if (some file exists and I have permissions for it) open the file
, et vous ne pouvez pas dire if (some file does not exist) create the file
. Il y a toujours la possibilité que le résultat de votre if
condition de changement entre les deux parties de votre code. Les opérations sont distinctes: pas atomique.
Pour aggraver les choses, la nature du problème signifie que si vous êtes tenté de faire cette vérification, les chances sont que vous êtes déjà inquiet ou conscients que quelque chose que vous n'avez pas de contrôle est susceptible de se produire dans le fichier. La nature des environnements de développement font de cet événement moins susceptible de se produire au cours de vos tests et très difficile à reproduire. Ainsi, non seulement vous avez un bug, mais le bug n'apparaît pas lors des tests.
Par conséquent, dans des circonstances normales, le meilleur plan d'action est de ne pas même essayer de vérifier si un fichier ou un répertoire existe. Au lieu de cela, mettez votre temps de développement dans la gestion des exceptions dans le système de fichiers. Vous avez à gérer ces exceptions de toute façon, donc c'est une bien meilleure utilisation de vos ressources. Même si des exceptions sont lents, de vérifier l'existence d'un fichier nécessite un voyage supplémentaire sur le disque, et l'accès au disque est beaucoup plus lent. J'ai même un bien voté réponse à cet effet, dans une autre question.
Mais je vais avoir quelques doutes. Dans .Net, par exemple, si c'est vraiment toujours vrai, l' .Exists()
méthodes ne serait pas dans l'API en premier lieu. Également envisager des scénarios où vous attendez votre programme à la nécessité de la création d'un fichier. Le premier exemple qui vient à l'esprit est pour une application de bureau. Cette application s'installe par défaut de l'utilisateur du fichier de config à la maison répertoire, et le premier temps de chaque utilisateur démarre l'application, il copie ce fichier pour que l'utilisateur du dossier de données d'application. Elle attend que le fichier n'existe pas sur le premier démarrage.
Alors, quand est-il acceptable de vérifier à l'avance de l'existence (ou d'autres attributs, tels que la taille et les permissions d'un fichier? Attend de l'échec plutôt que de succès à la première tentative d'une bonne règle de pouce?