2010-01-22 5 views
5

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

+0

Проводник Windows, cmd, другой файловый менеджер, диалог открытия/сохранения оболочки. Есть больше вещей, чем просто Explorer, который может держать это открытым. – Joey

+0

Вы хотите определить, имеет ли Windows Explorer, в частности, его открытие, или просто какой-то другой процесс имеет открытую ручку? И чего вы хотите достичь? Захват исключения - довольно хороший признак того, что в каком-то другом процессе есть ручка, если это все, на что вы стремитесь. – Dathan

+0

@ Исключение Dathan Catching - хорошая идея, но у нас очень большое многопоточное приложение с кодовым основанием. Хорошо, если мы определяем погоду, к которой мы стремимся. Спасибо –

ответ

8

catch IOException?

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

Вы на самом деле не было выбора, как я это вижу, рассмотрим:

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

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

+0

Да, так я и поступил. Вероятно, вы все равно должны это контролировать. – Toji

1

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

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

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

Смежные вопросы