Come bloccare un file in Windows senza modificarlo o utilizzare strumenti di terze parti?


24

Esiste un modo per bloccare un file con strumenti integrati in modo che non possa essere eliminato o sovrascritto?

Per il test degli script di copia è necessario lock files temporarilyverificare la gestione degli errori negli script. Fino a XP ho usato il caricamento di un file in debug.exe per bloccarlo.

C'è un modo in Windows 7 (e versioni successive)?

Modifica
So che ci sono programmi che lo fanno. La mia domanda è se esiste un meccanismo integrato in Windows. A volte devo controllare uno script su un PC e non voglio installare nuovi programmi per quello.

Modifica2
Ecco anche dei buoni suggerimenti: come bloccare in modo esclusivo un file? , che tuttavia richiedono strumenti di terze parti o modifica il file da bloccare.


Il trucco del blocco note funziona per te?
nixda,

1
@nixda No. Sovrascrive il file. Devo bloccare un file presente senza modificarlo.
marsh-wiggle,

Vedo.
Ritiro il

Risposte:


45

Penso che PowerShell sia probabilmente il modo più semplice per ottenere questo risultato. Qualcosa di simile al seguente:

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

Durante la pausa, lo script precedente provoca il seguente prompt quando si tenta di aprire "myfile.txt":

inserisci qui la descrizione dell'immagine


2
Grande! Grazie! Con mia grande vergogna, devo confessare che mi sviluppo in PowerShell e non ho pensato di usare le classi .net per questo. [Spero che non vada oltre :-)]
marsh-wiggle,

1
Bella risposta. Per i curiosi, ecco il link MSDN al File::Openmetodo che dettaglia i parametri della chiamata (in particolare, l'ultimo argomento 'None', rifiuta di condividere il file con altri thread / processi - e allo stesso modo, esistono disposizioni per bloccare il file solo per lettura / scrittura o una loro combinazione).
Breakthrough

1
@moab Il file viene chiuso e l'handle rilasciato alla fine.
Dan,

2
Si noti $host.UI.RawUI.ReadKey(...)che non funzionerà in PowerShell ISE poiché ReadKey non è implementato per ISE. La soluzione è [void](Read-Host 'Press Enter to continue'). Non è esattamente lo stesso che l'utente deve premere Invio anziché qualsiasi tasto. Tuttavia, abbastanza buono per la maggior parte degli scopi. La soluzione alternativa è venuta da questo post sul blog: jeffwouters.nl/index.php/2016/06/…
SimonTewsi

4

Dal momento che non mi piace installare software che non userò effettivamente, ho trovato questo gioiello di un 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)"

Tutto il merito va a Torgeir Bakken, puoi vedere l'intero post qui: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/


Piacevole per coloro a cui non piace PowerShell come la soluzione sopra
marsh-wiggle,

0

Non puoi contrassegnarlo come di sola lettura? Ciò "bloccherebbe" efficacemente il file impedendo che venga modificato o eliminato.

Il comando attrib.exe è disponibile dalla riga di comando e ti permetterà di impostare un file o una directory in sola lettura. Maggiori informazioni su quel comando sono disponibili qui

Al contrario, è possibile eseguire la stessa operazione tramite la GUI facendo clic con il pulsante destro del mouse sul file o sulla directory che si desidera contrassegnare di sola lettura, selezionando le proprietà e selezionando la casella Sola lettura. Facendo clic su Applica / Ok, si applicano le nuove impostazioni al file o alla directory.


3
L'attributo di sola lettura impedisce solo modifiche ma non eliminazioni.
ComFreek,

0

Non sarebbe possibile limitare l'accessibilità al file con la scheda Sicurezza, quando si fa clic con il tasto destro del mouse e si passa a Proprietà per il file o la cartella?

Se l'utente ha l'accesso di amministratore al PC, ciò non gli consentirebbe di rimuovere tutte le altre possibilità di fare qualcosa con il file / la cartella?

Devo ammettere, mentre digito, che il mio PC di lavoro è ancora su WinXP Pro, quindi ciò che ho detto sopra potrebbe non essere più disponibile - non sono ancora a mio agio con la mia nuova scatola Win 8.1 Pro a casa come lo sono con il anni di lavoro con Win XP


Nessuna delle autorizzazioni NTFS disponibili simulerebbe il comportamento di un file bloccato. Il più vicino sarebbe rendere il file di sola lettura, ma possiamo essere sicuri che l'OP sia a conoscenza di quell'opzione e stia chiedendo di bloccare il file per una buona ragione.
Dico Reinstate Monica il

-2

In alcuni scenari la creazione di una nuova cartella con il nome del file può fare il lavoro. (Si verifica un errore nel tentativo di aprire il file).


Questo è davvero un commento e non una risposta alla domanda originale.
DavidPostill

Per me è stata la risposta in compito che mi ha portato a questa pagina. A causa di persone come te qualcuno non lo troverà nel suo compito simile.
noonex,

3
OP stava chiedendo come bloccare un file esistente . La creazione di una cartella con lo stesso nome non è possibile. "Esiste già una sottodirectory o un file xxx", pertanto la risposta non è applicabile al problema nella domanda.
DavidPostill

In molti casi è necessario "bloccare il file esistente" per assicurarsi che l'applicazione ottenga un errore nel tentativo di modificarlo o aprirlo. Smetterò davvero di spiegare cose ovvie ora - buona giornata, signore.
noonex,
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.