Como propositalmente bloquear exclusivamente um arquivo?

87

Quero manter um bloqueio exclusivo em um arquivo para que ele não possa ser lido ou gravado por mais nada. Existe uma ferramenta ou comando simples do Windows para fazer isso?

Suponho que a ferramenta ou utilitário implementaria a função Windows LockFileEx .

Nota : Tentei editores de texto como o Notepad e o Notepad ++ em um arquivo de texto, mas eles não possuem um bloqueio exclusivo.

John K
fonte
Por que não fazer apenas um? Além disso, quanto tempo eles devem segurar a fechadura? Eles deveriam esperar por algum evento?
Mehrdad
6
Eu considerei programar um, mas percebi que há uma ferramenta, editor ou comando rápido que posso usar. No superusuário, nem todos os usuários são programadores. bit.ly/lXT6ey Eu não queria seguir a rota Stackoverflow com esta pergunta. Estou testando o comportamento de um aplicativo quando ele não pode acessar arquivos.
John K
Talvez eu possa fazer uma para você - deixe-me saber quando a trava deve ser liberada.
Mehrdad
ver também os meus pergunta semelhante superuser.com/questions/519389/flock-command-for-windows
eadmaster
Aparentemente, editores como o Notepad e o Notepad ++ nem mantêm o arquivo aberto de maneira não exclusiva.
John

Respostas:

23

Experimente o Easy File Locker (freeware).

insira a descrição da imagem aqui

David
fonte
Não funciona no Windows 2003
Eric Bonnot
14
Este aplicativo não parece "Bloquear" arquivos, mas altera a permissão do arquivo. Essa é uma distinção importante se você estiver tentando testar como o aplicativo lida com arquivos sendo ativamente abertos / bloqueados por outro aplicativo. No meu caso, este aplicativo não funcionou. A solução 'notepad> file' deve ser a resposta aqui.
Javajavajavajavajava
1
NÃO FUNCIONA NO Windows 10. E desinstalável. Cuidado !!
Shahar Prish
Este aplicativo causou várias falhas de tela azul no Windows 10. Esse aplicativo também foi projetado para criar arquivos inacessíveis por meio de alterações de permissão, e não pelo bloqueio de arquivos por processos. Usar o FileLocker da resposta do @ RRKbabxW3 funcionou perfeitamente.
Jordan Mack
Vai para a tela azul da morte no Windows 10.
Gupta
137

Solução mais simples: No diretório de interesse, execute a partir da linha cmd:

notepad >filetolock

Como stdout redirecionado, ele permanecerá bloqueado até que o aplicativo (bloco de notas) seja encerrado.

Observe que o "filetolock" será substituído pelo redirecionamento, portanto você provavelmente não deseja usar um arquivo existente de qualquer importância. Um "filetolock" vazio não importará para o aplicativo que você está tentando testar, pois o aplicativo não poderá abri-lo de qualquer maneira.

user257114
fonte
38
usar append redirecionar vez agora substituir filetolock:notepad >>filetolock
eadmaster
5
solução muito útil, não há necessidade de instalar nada
Aprillion
5
Esta é uma solução muito melhor do que baixar mais freeware.
BenCr
9
Ainda funciona no Windows 10. Deve ser a resposta aceita
SoonDead 14/15/15
8
Por algum motivo, isso deve ser executado no cmd.exe. Não funciona no PowerShell. O arquivo é criado e o bloco de notas é aberto, mas você ainda pode excluir o arquivo, apesar de o bloco de notas estar aberto. Eu testei isso no Windows Server 2012 e Windows 10.
Ville Salonen
32

Bloquear um arquivo sem ferramentas de terceiros , nenhuma alteração no arquivo sendo bloqueado e o arquivo nem mesmo pode ser copiado

Esse script do PowerShell é uma citação de uma resposta a uma pergunta semelhante.

Se você achar que é útil, poderá votar novamente na resposta original e não nesta postagem.

#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
$file.Close()
marsh-wiggle
fonte
2
Eu achei isso como a única solução de trabalho. Ambos os métodos EasyFileLocker bloco de notas e não bloqueia totalmente o arquivo e ainda pode ser copiado (testado no Windows 10)
HypeZ
Para o Powershell ISE, use em [void](Read-Host 'Press Enter to continue')vez de $host.UI.RawUI.ReadKey(...)como ReadKey não é suportado no pseudo-console no Powershell ISE.
SimonTewsi
26

Abra-o com o MS-Excel ... este aplicativo bloqueia um arquivo enquanto está aberto.

Gelo
fonte
10
E eu pensei que o Excel era útil antes!
Scott Stafford
11

O FileLocker é uma ferramenta de linha de comando freeware / open source.

Uso:

FileLocker [/T LockTime] [/I] [/K] [/Q] file [file...]

/T LockTime     Time in milliseconds to lock the file
/I              Infinite locking until process is killed (default)
/K              Lock file until key is pressed
/Q              Be quiet.
RRKbabxW3
fonte
1
Isso funcionou para mim, onde outras soluções não
cowlinator
2
Observe que no Windows 10, ele deve ser executado como administrador.
cowlinator
4

Como não posso escrever comentários, adiciono minhas informações desta maneira:

https://stackoverflow.com/questions/5860542/how-can-i-simulate-a-locked-file-one-which-has-a-write-lock

EDIT: resumo da outra pergunta:

  • comando de pausa: ( >&2 pause ) >> file2lock.txt

  • Programas MS como bloqueios de word ou excel também (funciona para arquivos de texto)

  • Programaticamente usar LockFileEx(API do Windows) com LOCKFILE_EXCLUSIVE_LOCKeLOCKFILE_FAIL_IMMEDIATELY

Mayra Delgado
fonte
1

Aqui está como eu replico o comportamento do usuário de um arquivo bloqueado para teste de bug.

Dim s As New StreamReader ("C: \ test \ sampleFile.txt")

Eu adiciono essa linha ao meu teste de unidade para bloquear o arquivo e, em seguida, execute o teste no modo de depuração para replicar o mau comportamento quando um determinado arquivo estiver bloqueado.

Ainda não sei como meus usuários de negócios estão bloqueando o arquivo fornecido. Como você disse, o bloco de notas não pode bloqueá-lo exclusivamente.

Felizmente, declarar um leitor de stream bloqueia um arquivo exclusivamente, a menos que você especifique o contrário.

Kincaid
fonte
1

Segundo a solução com marsh-wiggle. Aqui está a minha versão do script:

# This is lock_file.ps1
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$False)]
  [string]$my_file_path
)
if (!$my_file_path){
   Write-Host "Parameter my_file_path is missing, quitting."
   [Environment]::Exit(1)
}
$my_file_exists = Test-Path $my_file_path -pathType Leaf
If ($my_file_exists) {
   #Open the file in read only mode, without sharing (I.e., locked as requested)
   $my_open_file = [System.io.File]::Open($my_file_path, '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
   $my_open_file.Close()
} else {
   Write-Host "Parameter mismatch, file doesn't exist." 
}

Você pode chamá-lo do cmd assim:

powershell -ExecutionPolicy Unrestricted -file lock_file.ps1 "path\to\file_to_lock.txt"
Ciove
fonte
0

Para testar o "acesso negado" ao Robocopy ERROR, acabei de remover o acesso de leitura para o usuário. Isso funcionaria?

Para o Windows 10, isso pode ser feito facilmente na linha de comando

arquivo de bloqueio chmod 'ur'

No Windows 7, você pode usar as propriedades de segurança do File Explorer.

Táxi
fonte
-2

Substitua 'Your-Password-Here' por sua senha e salve este script como Locker.bat

*cls
@ECHO OFF
title Folder Locker
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" goto UNLOCK
if NOT EXIST Locker goto MDLOCKER
:CONFIRM
echo Are you sure u want to Lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM
:LOCK
ren Locker "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
echo Folder locked
goto End
:UNLOCK
echo Enter password to Unlock folder
set/p "pass=>"
if NOT %pass%==Your-Password-Here goto FAIL
attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Locker
echo Folder Unlocked successfully
goto End
:FAIL
echo Invalid password
goto end
:MDLOCKER
md Locker
echo Locker created successfully
goto End
:End*

Quando você executa o arquivo em lotes, ele apresenta o prompt 'Tem certeza de que deseja bloquear a pasta (S / N)'; digite Y e pressione enter e a pasta será bloqueada.

Execute o arquivo em lotes novamente e digite sua senha e a pasta e todos os seus arquivos serão desbloqueados novamente.

John Doe
fonte
2
Isso funciona apenas em pastas e, pior ainda, renomeia a pasta. Isso não serve para nada.
Twisty Imitador de