Wie kann ich eine Datei gezielt exklusiv sperren?

87

Ich möchte eine exklusive Sperre für eine Datei haben, damit sie von nichts anderem gelesen oder geschrieben werden kann. Gibt es ein einfaches Windows-Tool oder einen Befehl, um dies zu tun?

Ich nehme an, das Tool oder Dienstprogramm würde die LockFileEx Windows-Funktion implementieren .

Hinweis : Ich habe Texteditoren wie Notepad und Notepad ++ für eine Textdatei ausprobiert, aber sie haben keine exklusive Sperre.

John K
quelle
Warum nicht einfach einen machen? Und wie lange sollten sie das Schloss halten? Sollten sie auf ein Ereignis warten?
Mehrdad
6
Ich habe überlegt, eine zu programmieren, aber es gibt ein schnelles Tool, einen Editor oder einen Befehl, den ich verwenden kann. Unter Superuser sind nicht alle Benutzer Programmierer. bit.ly/lXT6ey Ich wollte mit dieser Frage nicht den Stackoverflow-Weg gehen. Teste das Verhalten einer App, wenn sie nicht auf Dateien zugreifen kann.
John K
Vielleicht kann ich eines für Sie machen - ich weiß nur, wann die Sperre aufgehoben werden sollte.
Mehrdad
siehe auch meine ähnliche Frage superuser.com/questions/519389/flock-command-for-windows
eadmaster
Anscheinend halten Editoren wie Notepad und Notepad ++ die Datei nicht einmal nicht exklusiv offen.
John

Antworten:

23

Probieren Sie Easy File Locker (Freeware).

Bildbeschreibung hier eingeben

David
quelle
Funktioniert nicht unter Windows 2003
Eric Bonnot
14
Diese Anwendung scheint Dateien nicht zu "sperren", sondern nur die Berechtigungen für die Datei zu ändern. Dies ist ein wichtiger Unterschied, wenn Sie testen möchten, wie Ihre Anwendung Dateien verarbeitet, die von einer anderen Anwendung aktiv geöffnet / gesperrt werden. In meinem Fall hat diese Anwendung nicht funktioniert. Die Lösung "Editor> Datei" sollte hier die Antwort sein.
Javajavajavajavajava
1
Funktioniert nicht unter Windows 10. Und deinstallierbar. In acht nehmen!!
Shahar Prish
Diese App verursachte unter Windows 10 mehrere Abstürze mit einem blauen Bildschirm. Diese App wurde auch zum Erstellen von Dateien entwickelt, auf die über Berechtigungsänderungen nicht zugegriffen werden kann, und nicht zum Sperren von Dateien durch Prozesse. Die Verwendung von FileLocker aus der Antwort von @ RRKbabxW3 funktionierte perfekt.
Jordan Mack
Geht zum blauen Bildschirm des Todes unter Windows 10.
Gupta
137

Einfachere Lösung: Führen Sie im Verzeichnis von Interesse aus der Zeile cmd Folgendes aus:

notepad >filetolock

Als umgeleitete Standardausgabe bleibt sie gesperrt, bis die Anwendung (Editor) beendet wird.

Beachten Sie, dass die "Filetolock" durch die Umleitung überschrieben wird, so dass Sie wahrscheinlich keine vorhandene Datei von Bedeutung verwenden möchten. Ein leeres "filetolock" spielt für die Anwendung, die Sie testen möchten, keine Rolle, da die App es ohnehin nicht öffnen kann.

user257114
quelle
38
Verwenden Sie stattdessen Append Redirect, um jetzt Filetolock zu überschreiben:notepad >>filetolock
eadmaster
5
sehr nützliche Lösung, keine Notwendigkeit, etwas zu installieren
April
5
Dies ist eine viel bessere Lösung, als mehr Freeware herunterzuladen.
BenCr
9
Funktioniert immer noch unter Windows 10. Sollte die akzeptierte Antwort sein
SoonDead
8
Aus irgendeinem Grund muss dies in cmd.exe ausgeführt werden. In PowerShell funktioniert es nicht. Die Datei wird erstellt und der Editor geöffnet. Sie können die Datei jedoch trotzdem löschen, obwohl der Editor geöffnet ist. Ich habe dies sowohl auf Windows Server 2012 als auch auf Windows 10 getestet.
Ville Salonen
32

Sperren Sie eine Datei ohne 3rd Party Tools , keine Änderungen an der Datei ist gesperrt und Datei nicht einmal kopiert werden können

Dieses PowerShell-Skript ist ein Zitat aus einer Antwort auf eine ähnliche Frage.

Wenn Sie es hilfreich finden, können Sie die ursprüngliche Antwort und nicht diesen Beitrag stimmen .

#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()
Sumpf-Wackeln
quelle
2
Ich fand dies als die einzige funktionierende Lösung. Sowohl die Notepad- als auch die EasyFileLocker-Methode sperren die Datei nicht vollständig und können trotzdem kopiert werden (getestet unter Windows 10)
HypeZ
Für Powershell ISE wird die Verwendung [void](Read-Host 'Press Enter to continue')anstelle von $host.UI.RawUI.ReadKey(...)ReadKey in der Pseudokonsole in Powershell ISE nicht unterstützt.
SimonTewsi
26

Öffne es mit MS-Excel ... diese App sperrt eine geöffnete Datei.

Eis
quelle
10
Und ich dachte, Excel war nützlich, bevor!
Scott Stafford
11

FileLocker ist ein Freeware / Open Source-Befehlszeilenprogramm.

Verwendungszweck:

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
quelle
1
Dies funktionierte für mich, wo andere Lösungen es nicht taten
Cowlinator
2
Beachten Sie, dass es unter Windows 10 als Administrator ausgeführt werden muss.
Cowlinator
4

Da ich keine Kommentare schreiben kann, füge ich meine Informationen folgendermaßen hinzu:

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

EDIT: Zusammenfassung der anderen Frage:

  • Befehl pause: ( >&2 pause ) >> file2lock.txt

  • MS-Programme wie Word- oder Excel-Sperren auch (funktioniert für Textdateien)

  • Verwenden Sie programmgesteuert LockFileEx(Windows-API) mit LOCKFILE_EXCLUSIVE_LOCKundLOCKFILE_FAIL_IMMEDIATELY

Mayra Delgado
quelle
1

So repliziere ich das Benutzerverhalten einer gesperrten Datei zum Testen von Fehlern.

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

Ich füge diese Zeile meinem Unit-Test hinzu, um die Datei zu sperren, und führe dann den Test im Debug-Modus aus, um ein schlechtes Verhalten zu replizieren, wenn eine bestimmte Datei gesperrt ist.

Ich weiß immer noch nicht, wie meine Geschäftsbenutzer die angegebene Datei sperren. Wie Sie sagten, kann der Editor ihn nicht exklusiv sperren.

Glücklicherweise sperrt das Deklarieren eines Streamreaders eine Datei ausschließlich, sofern Sie nichts anderes angeben.

kincaid
quelle
1

Ich befürworte die Lösung mit Marsh-Wiggle. Hier ist meine Version des Skripts:

# 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." 
}

Sie können es wie folgt von cmd aufrufen:

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

Zum Testen von Robocopy ERROR "Zugriff verweigert" Ich habe gerade den Lesezugriff für den Benutzer entfernt. Funktioniert das?

Für Windows 10 kann dies problemlos über die Befehlszeile erfolgen

chmod 'ur' lockfile

Für Windows 7 können Sie die Sicherheitseigenschaften des Datei-Explorers verwenden.

Taxi
quelle
-2

Ersetzen Sie 'Your-Password-Here' durch Ihr Passwort und speichern Sie dieses Skript als 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*

Wenn Sie die Stapeldatei ausführen, wird die Eingabeaufforderung "Sind Sie sicher, dass Sie den Ordner sperren möchten (J / N)" angezeigt. Geben Sie Y ein und drücken Sie die Eingabetaste. Der Ordner wird gesperrt.

Führen Sie die Batch-Datei erneut aus und geben Sie Ihr Kennwort und den Ordner ein. Alle Ihre Dateien werden wieder entsperrt.

John Doe
quelle
2
Dies funktioniert nur in Ordnern und benennt den Ordner schlimmer noch um . Das geht gar nicht.
Twisty Imitator