Primeiro, como @fejyesynb observou corretamente, o Bloco de Notas não mantém um identificador de arquivo ativo - ele abre o arquivo, lê (ou grava) rapidamente os dados e fecha o arquivo novamente. Os dados estão na tela, mas o arquivo está realmente fechado o tempo todo.
Em segundo lugar, o Windows herdou do MS-DOS o conceito de "modos de compartilhamento" como uma forma simples de bloqueio de arquivos. Ao abrir um arquivo, você pode escolher se deseja compartilhá-lo para leitura / gravação, somente leitura ou não.
Por exemplo, se seu programa (robocopy) quiser abrir o arquivo para leitura (FileAccess.Read), ele somente terá êxito se todas as alças de arquivo existentes permitirem o modo de compartilhamento 'ler' se não houver nenhum arquivo aberto manipulado). Mas se o arquivo foi aberto com "share none", você receberá "File in use" se tentar abri-lo para qualquer propósito.
Você pode fazer isso no PowerShell, chamando o .NET de nível baixo Função System.IO.File.Open () :
$fh = [System.IO.File]::Open($path,
[System.IO.FileMode]::Open,
[System.IO.FileAccess]::Read,
[System.IO.FileShare]::None)
O quarto parâmetro pode ser qualquer System.IO .FileShare enum value, por exemplo:
-
[System.IO.FileShare]::None
- não compartilha nada -
[System.IO.FileShare]::Read
- compartilhar leitura (gravação / exclusão de bloco) -
[System.IO.FileShare]::ReadWrite
- compartilhar leitura / gravação (exclusão de bloco)
Quando terminar:
$fh.Close()