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