Como bloquear um arquivo no Windows sem alterá-lo ou usar ferramentas de terceiros?

24

Existe uma maneira de bloquear um arquivo com ferramentas a bordo para que ele não possa ser excluído ou substituído?

Para testar scripts de cópia, preciso lock files temporarilyverificar o tratamento de erros nos scripts. Até XP, usei o carregamento de um arquivo no debug.exe para bloqueá-lo.

Existe uma maneira no Windows 7 (e posterior)?

Editar
Eu sei que existem programas fazendo isso. Minha pergunta é se existe um mecanismo interno no Windows. Às vezes, tenho que verificar um script em um PC e não quero instalar novos programas para isso.

Edit2
Aqui também há boas sugestões: Como bloquear exclusivamente um arquivo de propósito? , que, no entanto, precisam de ferramentas de terceiros ou alteram o arquivo para ser bloqueado.

marsh-wiggle
fonte
O truque do bloco de notas funciona para você?
Nixda
1
@nixda No. Ele substitui o arquivo. Preciso bloquear um arquivo presente sem alterá-lo.
Marsh-wiggle
Entendo.
Retiro

Respostas:

45

Acho que o PowerShell é provavelmente a maneira mais legal de fazer isso. Algo como o seguinte:

#Specify the file name
$fileName = "C:\myfile.txt"

#Open the file in read only mode, without sharing (I.e., locked as requested)
$file = [System.io.File]::Open($fileName, 'Open', 'Read', 'None')

#Wait in the above (file locked) state until the user presses a key
Write-Host "Press any key to continue ..."
$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

#Close the file (This releases the current handle and unlocks the file)
$file.Close()

Enquanto pausado, o script acima causa o seguinte prompt ao tentar abrir "myfile.txt":

insira a descrição da imagem aqui

Dan
fonte
2
Ótimo! Obrigado! Para minha vergonha, devo confessar que desenvolvo no PowerShell e não pensei em usar as classes .net para isso. [Espero que não vai ir mais longe :-)]
pântano-de manobra
1
Boa resposta. Para os curiosos, aqui está o linkFile::Open do MSDN para o método que detalha os parâmetros da chamada (especificamente, o último argumento 'None', declina o compartilhamento do arquivo com outros threads / processos - e da mesma forma, existem disposições para bloquear o arquivo somente para leitura / gravação ou uma combinação dos mesmos).
Revelação
1
@moab O arquivo é fechado e o identificador liberado no final.
28414 Dan
2
Observe $host.UI.RawUI.ReadKey(...)que falhará no PowerShell ISE, pois o ReadKey não está implementado para o ISE. A solução alternativa é [void](Read-Host 'Press Enter to continue'). Não é exatamente o mesmo que o usuário precisa pressionar Enter, em vez de qualquer tecla. No entanto, bom o suficiente para a maioria dos propósitos. A solução alternativa veio desta postagem de blog: jeffwouters.nl/index.php/2016/06/…
SimonTewsi 7/16
4

Como não gosto de instalar softwares que na verdade não vou usar, encontrei essa jóia do VBScript:

Const ForAppending = 8
Set oFSO = CreateObject("Scripting.FileSystemObject")

Set f = oFSO.OpenTextFile("C:\Tst\My2.txt", ForAppending, True)

MsgBox "Press OK to unlock the file(s)"

Todo o crédito é para Torgeir Bakken, você pode ver a publicação completa aqui: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/

Eriks Ocakovskis
fonte
Bom para quem não gosta de PowerShell, como a solução acima
marsh-wiggle
0

Você não pode marcá-lo como somente leitura? Isso efetivamente "trava" o arquivo, não permitindo que ele seja alterado ou excluído.

O comando attrib.exe está disponível na linha de comando e permitirá que você defina um arquivo ou diretório como somente leitura. Mais informações sobre esse comando podem ser encontradas aqui

Por outro lado, você pode fazer o mesmo através da GUI clicando com o botão direito do mouse no arquivo ou diretório que deseja marcar como somente leitura, selecionando propriedades e marcando a caixa Somente leitura. Clicar em Aplicar / Ok, aplica a nova configuração ao arquivo ou diretório.

Derek Wirch
fonte
3
O atributo somente leitura impede apenas modificações, mas não exclusões.
ComFreek
0

Não seria possível limitar a acessibilidade ao arquivo com a guia Segurança, quando você clica com o botão direito do mouse e vai para Propriedades do arquivo ou pasta?

Se o usuário tiver acesso de administrador ao PC, isso não permitirá que ele remova todos os outros recursos de fazer alguma coisa com o arquivo / pasta?

Tenho que admitir que enquanto digito, meu PC de trabalho ainda está no WinXP Pro, portanto, o que afirmei acima pode não estar mais disponível - ainda não me sinto tão confortável com minha nova caixa do Win 8.1 Pro em casa quanto com o computador. anos de trabalho com o Win XP

Botas66
fonte
Nenhuma das permissões NTFS disponíveis imitaria o comportamento de um arquivo bloqueado. O mais próximo seria tornar o arquivo somente leitura, mas podemos ter certeza de que o OP está ciente dessa opção e está perguntando sobre o bloqueio do arquivo por um bom motivo.
Eu digo Restabelecer Monica
-2

Em alguns cenários, criar uma nova pasta com o nome do arquivo pode fazer o trabalho. (Ou seja, um erro ao tentar abrir o arquivo).

noonex
fonte
Este é realmente um comentário e não uma resposta à pergunta original.
DavidPostill
Para mim, foi a resposta na tarefa que me levou a esta página. Por causa de pessoas como você, alguém não o encontrará em tarefas semelhantes.
noonex
3
O OP estava perguntando como bloquear um arquivo existente . Criar uma pasta com o mesmo nome não é possível. "Um subdiretório ou arquivo xxx já existe", portanto, sua resposta não se aplica ao problema da pergunta.
DavidPostill
Em muitos casos, "bloquear arquivo existente" é necessário para garantir que o aplicativo receba um erro ao tentar modificá-lo ou abri-lo. Eu realmente vou parar de explicar as coisas óbvias agora - tenha um bom dia, senhor.
Noonex 26/05