Comment verrouiller délibérément et exclusivement un fichier?

87

Je souhaite conserver 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 le faire?

Je suppose que l'outil ou l'utilitaire implémenterait la fonction Windows LockFileEx .

Remarque : j'ai essayé des éditeurs de texte tels que Notepad et Notepad ++ sur un fichier texte, mais ils ne disposent pas d'un verrou exclusif sur celui-ci.

John K
la source
Pourquoi ne pas en faire un? Aussi, combien de temps devraient-ils tenir la serrure? Devraient-ils attendre un événement?
Mehrdad
6
J'ai envisagé d'en programmer un, mais je me suis dit qu'il y avait un outil rapide, un éditeur ou une commande que je pouvais utiliser. Sur le superutilisateur, tous les utilisateurs ne sont pas des programmeurs. bit.ly/lXT6ey Je ne voulais pas suivre la route Stackoverflow avec cette question. Je teste le comportement d'une application lorsqu'elle ne peut pas accéder aux fichiers.
John K
Je pourrais peut-être en faire un pour vous - je veux juste savoir quand le verrou doit être relâché.
Mehrdad
Voir aussi ma question similaire superuser.com/questions/519389/flock-command-for-windows
eadmaster
Apparemment, des éditeurs tels que Notepad et Notepad ++ ne gardent même pas le fichier ouvert de manière non exclusive.
Jean

Réponses:

23

Essayez Easy File Locker (freeware).

entrez la description de l'image ici

David
la source
Ne fonctionne pas sur Windows 2003
Eric Bonnot
14
Cette application ne semble pas "verrouiller" les fichiers au lieu de changer les permissions sur le fichier. Cette distinction est importante si vous essayez de tester la manière dont votre application gère les fichiers en cours d’ouverture / de verrouillage par une autre application. Dans mon cas, cette application n'a pas fonctionné. La solution 'notepad> file' devrait être la réponse ici.
javajavajavajavajava
1
NE FONCTIONNE PAS SUR Windows 10. Et désinstallable. Il faut se méfier!!
Shahar Prish
Cette application a provoqué plusieurs pannes d'écran bleu sous Windows 10. Cette application est également conçue pour créer des fichiers inaccessibles via des modifications d'autorisation, et non par verrouillage de fichiers par des processus. Utiliser FileLocker de @RRKbabxW3 a parfaitement fonctionné.
Jordan Mack
Passe à l'écran bleu de la mort sous Windows 10.
Gupta le
138

Solution plus simple: dans le répertoire d’intérêt, depuis la ligne de commande:

notepad >filetolock

En tant que stdout redirigé, il restera verrouillé jusqu'à ce que l'application (le bloc-notes) soit terminée.

Notez que le "filetolock" sera écrasé par le ré-acheminement, vous ne souhaiterez donc probablement pas utiliser un fichier existant d’une importance quelconque. Un "filetolock" vide n'aura pas d'importance pour l'application que vous essayez de tester, car l'application ne pourra pas l'ouvrir de toute façon.

utilisateur257114
la source
38
utilisez append redirect à la place pour écraser maintenant filetolock:notepad >>filetolock
eadmaster
5
solution très utile, pas besoin d'installer quoi que ce soit
Aprillion
5
C'est une bien meilleure solution que de télécharger plus de gratuiciels.
BenCr
9
Fonctionne
8
Pour une raison quelconque, cela doit être exécuté dans cmd.exe. Cela ne fonctionne pas dans PowerShell. Le fichier est créé et le bloc-notes est ouvert, mais vous pouvez toujours supprimer le fichier même si le bloc-notes est ouvert. J'ai testé cela sur Windows Server 2012 et Windows 10.
Ville Salonen
32

Verrouiller un fichier sans outils tiers , aucune modification du fichier en cours de verrouillage et le fichier ne pouvant même pas être copié

Ce script PowerShell est une citation d'une réponse à une question similaire.

Si vous le trouvez utile, vous pouvez voter à la place de la réponse originale et non de cette publication.

#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()
remue-marais
la source
2
J'ai trouvé cela comme la seule solution de travail. Le bloc-notes et les méthodes EasyFileLocker ne verrouillent pas totalement le fichier et peuvent toujours être copiés (testés sous Windows 10)
HypeZ
Pour Powershell ISE utiliser au [void](Read-Host 'Press Enter to continue')lieu de $host.UI.RawUI.ReadKey(...)comme ReadKey est pas pris en charge dans le pseudo-console dans Powershell ISE.
SimonTewsi
26

Ouvrez-le avec MS-Excel ... cette application verrouille un fichier lorsqu'elle est ouverte.

La glace
la source
10
Et je pensais qu'Excel était utile avant!
Scott Stafford
11

FileLocker est un outil de ligne de commande freeware / open source.

Usage:

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
la source
1
Cela a fonctionné pour moi là où d'autres solutions ne fonctionnaient pas
cowlinator le
2
Notez que sous Windows 10, il doit être exécuté en tant qu’administrateur.
cowlinator
4

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

  • Programmes MS tels que Word ou Excel aussi (fonctionne pour les fichiers texte)

  • Utiliser par programmation LockFileEx(API Windows) avec LOCKFILE_EXCLUSIVE_LOCKetLOCKFILE_FAIL_IMMEDIATELY

Mayra Delgado
la source
1

Voici comment je réplique le comportement de l'utilisateur d'un fichier verrouillé pour le test de bogue.

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

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

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

Heureusement, la déclaration d'un lecteur de flux verrouille un fichier exclusivement, sauf indication contraire de votre part.

kincaid
la source
1

Je seconde la solution par 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"
Ciove
la source
0

Pour tester Robocopy ERROR "accès refusé", je viens de supprimer l'accès en lecture pour l'utilisateur. Cela fonctionnerait-il?

Pour Windows 10, cela peut être fait facilement à partir de la ligne de commande

chmod 'ur' lockfile

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

Taxi
la source
-2

Remplacez «Votre mot de passe ici» par votre mot de passe et enregistrez ce script sous le nom 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 de commandes, il vous affiche l'invite «Êtes-vous sûr de vouloir verrouiller le dossier (Y / N)»? tapez Y et appuyez sur Entrée, le dossier sera verrouillé.

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

John Doe
la source
2
Cela ne fonctionne que sur les dossiers, et pire encore, il renomme le dossier. Cela ne va pas du tout.
Twisty Impersonator