Во-первых, как правильно заметил @fejyesynb, Блокнот не сохраняет дескриптор активного файла - он открывает файл, быстро читает (или записывает) данные и снова закрывает файл. Данные на экране, но файл фактически закрыт все время.
Во-вторых, Windows унаследовала от MS-DOS концепцию «общих режимов» как простую форму блокировки файлов. При открытии файла вы можете выбрать, использовать его для чтения / записи, только для чтения или нет.
Например, если ваша программа (robocopy) хочет открыть файл для чтения (FileAccess.Read), это будет успешно выполнено, только если все существующие файловые дескрипторы разрешают режим общего доступа «чтение» (или если нет никаких открытых файловых дескрипторов в все). Но если файл был открыт с помощью «share none», вы получите «Файл используется», если попытаетесь открыть его для каких-либо целей.
Вы можете выполнить это в PowerShell, вызвав низкоуровневую функцию .NET System.IO.File.Open () :
$fh = [System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::None)
4-й параметр может быть любым значением перечисления System.IO.FileShare, например:
[System.IO.FileShare]::None
- не делись ничем[System.IO.FileShare]::Read
- поделиться прочитанным (заблокировать запись / удаление)[System.IO.FileShare]::ReadWrite
- разделить чтение / запись (блокировка удаления)
Когда вы закончите:
$fh.Close()