Come bloccare intenzionalmente un file?


83

Voglio tenere un blocco esclusivo su un file in modo che non possa essere letto o scritto da nessun altro. Esiste un semplice strumento o comando di Windows per farlo?

Suppongo che lo strumento o l'utilità implementerebbe la funzione Windows LockFileEx .

Nota : ho provato editor di testo come Notepad e Notepad ++ su un file di testo ma non hanno un blocco esclusivo su di esso.


Perché non crearne uno solo? Inoltre, per quanto tempo dovrebbero tenere il lucchetto? Dovrebbero aspettare qualche evento?
Mehrdad,

5
Ho pensato di programmarne uno ma ho pensato che potessi usare uno strumento, un editor o un comando rapidi. Su superutente non tutti gli utenti sono programmatori. bit.ly/lXT6ey Non volevo seguire la rotta StackOverflow con questa domanda. Sto testando il comportamento di un'app quando non è in grado di accedere ai file.
John K,

Potrei essere in grado di crearne uno per te - fammi solo sapere quando il blocco dovrebbe essere rilasciato.
Mehrdad,


Apparentemente, editor come Notepad e Notepad ++ non mantengono il file aperto in modo non esclusivo.
Giovanni

Risposte:


22

Prova Easy File Locker (gratuito).

inserisci qui la descrizione dell'immagine


Non funziona su Windows 2003
Eric Bonnot,

14
Questa applicazione non sembra "bloccare" i file tanto quanto modificare i permessi sul file. Questa è una distinzione importante se stai provando a testare come l'applicazione gestisce i file che vengono aperti / bloccati attivamente da un'altra applicazione. Nel mio caso questa applicazione non ha funzionato. La soluzione "notepad> file" dovrebbe essere la risposta qui.
javajavajavajavajava,

1
NON FUNZIONA SU Windows 10. E non installabile. Attenzione !!
Shahar Prish,

Questa app ha causato più arresti anomali della schermata blu su Windows 10. Questa app è progettata anche per la creazione di file inaccessibili tramite modifiche alle autorizzazioni, non per il blocco dei file da parte dei processi. L'uso di FileLocker dalla risposta di @ RRKbabxW3 ha funzionato perfettamente.
Jordan Mack,

134

Soluzione più semplice: nella directory di interesse eseguire dalla riga cmd:

notepad >filetolock

Come stdout reindirizzato, rimarrà bloccato fino alla chiusura dell'applicazione (blocco note).

Si noti che il "filetolock" verrà sovrascritto dal re-direct, quindi probabilmente non si desidera utilizzare un file esistente di alcuna importanza. Un "filetolock" vuoto non ha importanza per l'applicazione che stai tentando di testare, in quanto l'app non sarà in grado di aprirlo comunque.


36
usa invece il reindirizzamento append invece di sovrascrivere filetolock:notepad >>filetolock
eadmaster il

5
soluzione molto utile, non è necessario installare nulla
Aprillion

5
Questa è una soluzione molto migliore rispetto al download di più freeware.
BenCr

8
Funziona ancora su Windows 10. Dovrebbe essere la risposta accettata
Presto il

8
Per qualche motivo questo deve essere eseguito in cmd.exe. Non funziona in PowerShell. Il file viene creato e il blocco note viene aperto ma è comunque possibile eliminare il file nonostante sia aperto il blocco note. Ho provato questo su Windows Server 2012 e Windows 10.
Ville Salonen il

32

Blocca un file senza strumenti di terze parti , nessuna modifica al file viene bloccato e il file non può nemmeno essere copiato

Questo script di PowerShell è una citazione da una risposta a una domanda simile.

Se lo trovi utile, puoi votare la risposta originale e non questo post.

#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()

2
ho trovato questo come l'unica soluzione funzionante. Entrambi i metodi di blocco note e EasyFileLocker non bloccano completamente il file e possono comunque essere copiati (testati su Windows 10)
HypeZ

Per Powershell ISE utilizzare [void](Read-Host 'Press Enter to continue')invece $host.UI.RawUI.ReadKey(...)che ReadKey non è supportato nella pseudo-console in Powershell ISE.
SimonTewsi,


11

FileLocker è uno strumento da riga di 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.

1
Questo ha funzionato per me dove altre soluzioni non lo erano
cowlinator del

2
Si noti che su Windows 10, deve essere eseguito come amministratore.
cowlinator


1

Ecco come replicare il comportamento dell'utente di un file bloccato per il test dei bug.

Dim s come nuovo StreamReader ("C: \ test \ sampleFile.txt")

Aggiungo quella riga al mio test unit per bloccare il file e quindi eseguo il test in modalità debug per replicare comportamenti errati quando un determinato file è bloccato.

Non so ancora come i miei utenti aziendali stiano bloccando il file specificato. Come hai detto, il blocco note non può bloccarlo esclusivamente.

Fortunatamente, la dichiarazione di uno streamreader blocca un file esclusivamente se non diversamente specificato.


1

Secondo la soluzione di marsh-wiggle. Ecco la mia versione dello 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." 
}

Puoi chiamarlo da cmd in questo modo:

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

-1

Sostituisci "Your-Password-Here" con la tua password e salva questo script come 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 esegui il file batch, ti verrà mostrato il prompt 'Sei sicuro di voler bloccare la cartella (S / N)'; digitare Y e premere invio per bloccare la cartella.

Eseguire di nuovo il file batch, immettere la password, la cartella e tutti i file verranno nuovamente sbloccati.


Funziona solo su cartelle e, peggio ancora, rinomina la cartella. Questo non lo farà affatto.
Twisty Impersonator,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.