Вопрос

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

Это было полезно?

Решение

перехватить исключение IOException?

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top