views:

181

answers:

3

In my application I'm trying to rename the folder, but if the folder is opened in Windows Explorer I get an IOException. How can I identify whether folder is opened in Windows Explorer in C#?

+7  A: 

catch the IOException?

As others have said, just try to do what you want, catch the exception if it happens and take appropriate action, whatever that is in your context.

You don't really have much choice as I see it, consider:

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

what happens if between CheckAccess succeeding and calling RenameFolder something else locks the folder? Whatcha gonna do then?

Sam Holder
Yeah, this is how I'd go about it. You should probably be monitoring this anyway.
Toji
+1  A: 

It is not reasonable to determine if a program has a folder open in such a way that prevents you from renaming it. Because immediately after you make the determination, another process could start or stop using the folder. Instead just do the operation and catch the resulting exception.

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

after a little searching I found this post and this post which show various techniques for how you can programatically determine which process has locked a file. One of those should allow you to check if explorer has the folder locked.

Sam Holder