2010-01-22 4 views
5

Dans mon application, j'essaie de renommer le dossier, mais si le dossier est ouvert dans Windows Explorer, je reçois un IOException. Comment puis-je identifier si le dossier est ouvert dans Windows Explorer en C#?Comment identifier si le dossier est ouvert?

+0

Windows Explorer, cmd, un autre gestionnaire de fichiers, une boîte de dialogue d'ouverture/de sauvegarde du shell. Il y a plus de choses que juste l'explorateur qui peut le maintenir ouvert. – Joey

+0

Voulez-vous identifier si l'Explorateur Windows, en particulier, l'a ouvert ou si un autre processus a un handle ouvert? Et que veux-tu accomplir? Attraper l'exception est une bonne indication que d'autres processus ont un problème, si c'est tout ce que vous visez. – Dathan

+0

@Dathan Catching exception est une bonne idée, mais nous avons une très grande application de base de code multi-threaded. C'est bon si nous identifions les conditions météorologiques auxquelles nous avons accès. Merci –

Répondre

8

attraper l'IOException? Comme d'autres l'ont dit, essayez de faire ce que vous voulez, attrapez l'exception si cela se produit et prenez les mesures appropriées, peu importe ce qui se passe dans votre contexte.

Vous n'avez pas vraiment le choix que je le vois, considérez:

bool iHaveAccess = CheckAccess(folder); 
if (iHaveAccess) 
{ 
    RenameFolder(folder,newFolderName); 
} 

ce qui se passe si entre CheckAccess réussir et appeler RenameFolder quelque chose d'autre verrouille le dossier? Que va-t-il faire alors?

+0

Ouais, voici comment je m'y prendrais. Vous devriez probablement surveiller cela de toute façon. – Toji

1

Il n'est pas raisonnable de déterminer si un dossier est ouvert dans un programme de manière à vous empêcher de le renommer. Parce que immédiatement après avoir fait la détermination, un autre processus pourrait commencer ou arrêter d'utiliser le dossier. Au lieu de faire l'opération et attraper l'exception qui en résulte.

try { 
    Directory.Move("old","new"); 
    return true; 
} catch (IOException) { 
    return false; 
} 
0

après un peu de recherche, je trouve this post et this post qui montrent différentes techniques de la façon dont vous pouvez déterminer quel processus programatically a verrouillé un fichier. L'un d'entre eux devrait vous permettre de vérifier si l'explorateur a le dossier verrouillé.

Questions connexes