2009-05-20 4 views
4

J'ai besoin de déplacer certains fichiers après leur traitement. Un autre processus accède au fichier et je ne suis pas sûr quand il les libère. Est-il possible de savoir quand le handle du fichier a été libéré afin que je puisse les déplacer à ce moment-là. J'utilise Microsoft C# et .Net framework 3.5.En attente d'un accès exclusif au fichier avant de le déplacer C#

Cheers, Hamid

Répondre

0

Juste essayer contniually d'ouvrir le fichier pour l'écriture exclusive? (par exemple, passez FileShare.None au constructeur FileStream). Une fois que vous l'avez ouvert, vous savez que personne d'autre ne l'utilise. Cependant, ce n'est peut-être pas la meilleure façon de faire ce que vous faites.

Si vous recherchez une communication bidirectionnelle, vérifiez si l'autre programme peut être appelé via un canal.

+0

Cela implique d'essayer/attraper lors de la création du FileStream, n'est-ce pas? Il doit y avoir une meilleure solution, mais je ne peux pas le trouver non plus: - / – tobsen

3

Si vous avez le contrôle à la fois du producteur du fichier et du consommateur, l'ancienne astuce consiste à créer le fichier sous un nom différent et à le renommer une fois terminé. Par exemple, disons que le producteur crée des fichiers toujours appelés file_.txt, et que votre client recherche tous les fichiers commençant par file_, alors le producteur peut faire ceci: 1. Créez le fichier appelé tmpfile_.txt 2. Lorsque le fichier est écrit, le producteur renomme simplement le fichier en file_.txt

L'opération de renommage est atomique, donc une fois que votre consommateur voit son disponible, il est sûr de l'ouvrir.

Bien sûr, cette réponse dépend si vous écrivez les deux programmes.

HTH Dermot.

0

Si vous contrôlez les deux sources, utilisez un mutex nommé (qui fonctionne à travers les processus) pour contrôler l'accès aux fichiers plutôt que de verrouiller le fichier au niveau du système de fichiers. De cette façon, vous n'avez pas besoin d'intercepter l'exception déclenchée en tentant de verrouiller un fichier verrouillé et de boucler dessus, ce qui est plutôt inélégant.

Questions connexes