it-swarm.com.de

Wie kann ich eine Datei gezielt exklusiv sperren?

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.

83
John K

Versuchen Sie Easy File Locker (Freeware).

enter image description here

22
David

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.

128
user257114

Sperren einer Datei ohne Drittanbieter-Tools , keine Änderungen an der gesperrten Datei und Datei können nicht mal kopiert werden

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 verbessern.

#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()
31
marsh-wiggle

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

25
Ice

FileLocker ist ein Freeware/Open Source-Kommandozeilen-Tool.

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.
11
RRKbabxW3

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_LOCK und LOCKFILE_FAIL_IMMEDIATELY

4
Mayra Delgado

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.

1
kincaid

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"
0
Ciove