Есть ли способ мгновенно проверить, используется ли каталог?

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

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

Описание

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

Пример

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

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