Как определить, открыта ли папка? - PullRequest
5 голосов
/ 22 января 2010

В моем приложении я пытаюсь переименовать папку, но если папка открывается в Windows Explorer, я получаю IOException. Как определить, открыта ли папка в проводнике Windows в C #?

Ответы [ 3 ]

8 голосов
/ 22 января 2010

поймать IOException?

Как уже говорили другие, просто попытайтесь сделать то, что вы хотите, поймайте исключение, если это произойдет, и предпримите соответствующие действия, что бы это ни было в вашем контексте.

У вас нет особого выбора, как мне кажется, подумайте:

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

что произойдет, если между успешным CheckAccess и вызовом RenameFolder что-то еще заблокирует папку? Что ты будешь делать тогда?

1 голос
/ 22 января 2010

Нет смысла определять, есть ли в программе папка, открытая таким образом, чтобы вы не могли ее переименовать. Потому что сразу после того, как вы сделаете определение, другой процесс может начать или остановить использование папки. Вместо этого просто выполните операцию и перехватите полученное исключение.

try {
  Directory.Move("old","new");
  return true;
} catch ( IOException ) {
  return false;
}
0 голосов
/ 24 января 2010

после небольшого поиска я нашел этот пост и этот пост , которые показывают различные методы, как вы можете программно определить, какой процесс заблокировал файл. Один из них должен позволить вам проверить, заблокирована ли папка обозревателя.

...