Есть ли способ мгновенно проверить, используется ли каталог? - PullRequest
10 голосов
/ 25 января 2012

Я хочу переместить каталог и все его подкаталоги с помощью Directory.Move.

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

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

Каков наилучший способ сделать это?

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

Ответы [ 2 ]

9 голосов
/ 25 января 2012

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

Всегда существует вероятность того, что что-то меняется между проверкой и ходом, поэтому все может пойти не так.

Просто попробуйте переместить папку и повторите попытку позже, если не удалось.

См. Также: Delphi: Проверьте, используется ли файл (это аналогичный вопрос, просто игнорируйте часть Delphi)

2 голосов
/ 25 января 2012

Описание

Вы можете поместить опцию Файла в блок try ... catch и поймать IOException.

Sample

try 
{
   // try to move
} 
catch (System.IO.IOException ex) 
{
   // file used by another process or other IO Exception
}

Дополнительная информация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...