Question

Je veux écrire / supprimer un fichier, mais parfois, je suis bloqué si le fichier est utilisé par un autre programme. Comment vérifier si le fichier est ouvert par un autre processus ou si je peux l'ouvrir pour l'écriture?

Était-ce utile?

La solution

Le problème est qu'entre le moment où vous vérifiez si vous pouvez obtenir un accès exclusif et l'ouverture du fichier, quelque chose d'autre obtient un accès exclusif au fichier et vous obtenez malgré tout l'exception.

Le seul moyen de vérifier si vous pouvez obtenir un verrou exclusif sur un fichier est d'essayer d'obtenir un verrou exclusif sur le fichier. Si vous l'avez, vous l'avez.

Si ce n'est pas le cas, vous attrapez l'exception et

  • Allez faire autre chose
  • Patientez quelques instants, puis réessayez

C’est une des situations de la vie & # 8217; où il vaut mieux demander pardon que permission:)

Autres conseils

Il existe un nouveau moyen d’obtenir l’origine du verrouillage de fichier pour Vista: http: // www. remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/

UserMode: Le meilleur moyen d'écrire dans un fichier verrouillé est de demander à l'utilisateur de le fermer dans l'autre processus. Dans les processus de traitement par lots, vous devez ignorer un tel fichier et enregistrer le problème. Fournir le nom de l'autre processus est un très bon moyen de trouver une solution pour l'utilisateur.

Vous ne savez pas dans quel langage de programmation vous souhaitez vérifier si vous pouvez écrire dans un fichier. En Java, java.io .File.canWrite () peut faire le travail à votre place.

Général:

Dans un système d'exploitation de type UNIX, vous pouvez utiliser la commande lsof .

Si vous voulez savoir quel programme contient un handle sur votre fichier, utilisez Process Monitor (téléchargement à partir de MicroSoft).

Cet outil a une interface de ligne de commande. Vous pouvez donc utiliser l'interface de script de votre langage (par exemple java.lang.Process) pour exécuter l'outil et afficher un message d'erreur utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top