119 votes

Comment verrouiller volontairement un fichier de manière exclusive ?

Je veux détenir un verrou exclusif sur un fichier afin qu'il ne puisse être lu ou écrit par rien d'autre. Existe-t-il un outil ou une commande Windows simple pour faire cela ?

Je suppose que l'outil ou l'utilitaire mettrait en œuvre la LockFileEx Fonction Windows.

Note : J'ai essayé des éditeurs de texte comme Notepad et Notepad++ sur un fichier texte mais ils ne détiennent pas de verrou exclusif sur celui-ci.

4voto

Mayra Delgado Points 151

Je ne peux pas écrire de commentaires, alors j'ajoute mes informations de cette façon :

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

EDIT : résumé de l'autre question :

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

  • Les programmes MS comme word ou excel se verrouillent également (fonctionne pour les fichiers texte)

  • Utiliser de manière programmée LockFileEx (API Windows) avec LOCKFILE_EXCLUSIVE_LOCK y LOCKFILE_FAIL_IMMEDIATELY

3voto

Ciove Points 161

J'approuve la solution de marsh-wiggle. Voici ma version du 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." 
}

Vous pouvez l'appeler depuis cmd comme ceci :

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

1voto

Lacie Thayer Points 11

Voici comment je reproduis le comportement de l'utilisateur d'un fichier verrouillé pour tester les bogues.

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

J'ajoute cette ligne à mon test unitaire pour verrouiller le fichier, puis j'exécute le test en mode débogage pour reproduire le mauvais comportement lorsqu'un fichier donné est verrouillé.

Je ne sais toujours pas comment mes utilisateurs professionnels verrouillent le fichier en question. Comme vous l'avez dit, le bloc-notes ne peut pas le verrouiller exclusivement.

Heureusement, déclarer un lecteur de flux verrouille exclusivement un fichier, sauf si vous spécifiez le contraire.

0voto

Cab Points 1

Pour tester Robocopy ERROR "access denied", j'ai simplement supprimé l'accès en lecture pour l'utilisateur. Cela fonctionnerait-il ?

Pour Windows 10, cela peut se faire facilement à partir de la ligne de commande

chmod 'u-r' lockfile

Pour Windows 7, vous pouvez utiliser les propriétés de sécurité de l'explorateur de fichiers.

-2voto

John Doe Points 1

Remplacez 'Your-Password-Here' par votre mot de passe, et enregistrez ce script sous le nom de 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*

Lorsque vous exécutez le fichier batch, le message "Are you sure u want to Lock the folder(Y/N)" s'affiche ; tapez Y et appuyez sur la touche Entrée et le dossier sera verrouillé.

Exécutez à nouveau le fichier batch, entrez votre mot de passe et le dossier et tous vos fichiers seront à nouveau déverrouillés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X