Comment verrouiller un fichier dans Windows sans le modifier ou à l'aide d'outils tiers?

24

Existe-t-il un moyen de verrouiller un fichier avec des outils intégrés afin qu'il ne puisse pas être supprimé ou écrasé?

Pour tester les scripts de copie, je dois lock files temporarilyvérifier la gestion des erreurs dans les scripts. Jusqu'à XP, j'ai utilisé le chargement d'un fichier dans debug.exe pour le verrouiller.

Existe-t-il un moyen dans Windows 7 (et versions ultérieures)?

Edit
Je sais qu'il y a des programmes qui font ça. Ma question est de savoir s'il existe un mécanisme intégré dans les fenêtres. Parfois, je dois vérifier un script sur un PC et je ne veux pas installer de nouveaux programmes pour cela.

Edit2
Voici également de bonnes suggestions: Comment verrouiller exclusivement et délibérément un fichier? , qui nécessitent cependant des outils tiers ou modifient le fichier à verrouiller.

marsh-wiggle
la source
L' astuce du bloc - notes vous convient-elle?
nixda
1
@nixda Non. Il écrase le fichier. J'ai besoin de verrouiller un fichier actuel sans le modifier.
marsh-wiggle
Je vois. Je retire mon vote serré
nixda

Réponses:

45

Je pense que PowerShell est probablement la meilleure façon d'y parvenir. Quelque chose comme ceci:

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

En pause, le script ci-dessus provoque l'invite suivante lors de la tentative d'ouverture de "monfichier.txt":

entrez la description de l'image ici

Dan
la source
2
Génial! Merci! À ma honte, je dois avouer que je développe en PowerShell et que je n'ai pas pensé à utiliser les classes .net pour cela. [J'espère que cela n'ira pas plus loin :-)]
marsh-wiggle
1
Bonne réponse. Pour les curieux, voici le lien MSDN à la File::Openméthode détaillant les paramètres de l'appel ( en particulier, le dernier argument, 'None', déclins partage du fichier avec d'autres fils / processus - et de même, il existe des dispositions pour verrouiller le fichier pour lecture / écriture uniquement , ou une combinaison de ceux-ci).
Percée du
1
@moab Le fichier est fermé et la poignée libérée à la fin.
Dan
2
Notez que l' $host.UI.RawUI.ReadKey(...)échec dans PowerShell ISE car ReadKey n'est pas implémenté pour l'ISE. La solution de contournement est [void](Read-Host 'Press Enter to continue'). Pas exactement la même chose que l'utilisateur doit appuyer sur Entrée plutôt que sur n'importe quelle touche. Cependant, assez bon pour la plupart des usages. La solution de contournement est venue de cet article de blog: jeffwouters.nl/index.php/2016/06/…
SimonTewsi
4

Comme je n'aime pas installer des logiciels que je n'utiliserai pas réellement, j'ai trouvé ce bijou de 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)"

Tout le mérite revient à Torgeir Bakken, vous pouvez voir l'article complet ici: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/

Eriks Ocakovskis
la source
Bien pour ceux qui n'aiment pas le PowerShell comme la solution ci
marsh-wiggle
0

Ne pouvez-vous pas le marquer comme étant en lecture seule? Cela "verrouillerait" effectivement le fichier en ne permettant pas de le modifier ou de le supprimer.

La commande attrib.exe est disponible sur la ligne de commande et vous permettra de définir un fichier ou un répertoire en lecture seule. Plus d'informations sur cette commande peuvent être trouvées ici

Inversement, vous pouvez faire la même chose via l'interface graphique en cliquant avec le bouton droit sur le fichier ou le répertoire qu'ils souhaitent marquer en lecture seule, en sélectionnant les propriétés et en cochant la case Lecture seule. Cliquez sur Appliquer / Ok, puis appliquez le nouveau paramètre au fichier ou au répertoire.

Derek Wirch
la source
3
L'attribut en lecture seule empêche uniquement les modifications mais pas les suppressions.
ComFreek
0

Ne serait-il pas possible de limiter l'accessibilité au fichier avec l'onglet Sécurité, lorsque vous cliquez avec le bouton droit et accédez aux Propriétés du fichier ou du dossier?

Si l'utilisateur a un accès administrateur au PC, cela ne lui permettrait-il pas de supprimer toutes les autres capacités de faire quoi que ce soit avec le fichier / dossier?

Je dois admettre pendant que je tape, que mon PC de travail est toujours sur WinXP Pro, donc ce que j'ai déclaré ci-dessus peut ne plus être disponible - je ne suis toujours pas aussi à l'aise avec ma nouvelle boîte Win 8.1 Pro à la maison que je le suis avec le années de travail avec Win XP

Bottes66
la source
Aucune des autorisations NTFS disponibles n'imiterait le comportement d'un fichier verrouillé. Le plus proche serait de rendre le fichier en lecture seule, mais nous pouvons être sûrs que l'OP est au courant de cette option et pose des questions sur le verrouillage du fichier pour une bonne raison.
Je dis Reinstate Monica
-2

Dans certains scénarios, la création d'un nouveau dossier avec le nom du fichier peut faire le travail. (C'est à dire obtenir une erreur en essayant d'ouvrir le fichier).

noonex
la source
Il s'agit vraiment d'un commentaire et non d' une réponse à la question d'origine.
DavidPostill
Pour moi, c'est la réponse en tâche qui m'a conduit à cette page. À cause de gens comme vous, quelqu'un ne le trouvera pas dans leur tâche similaire.
noonex
3
OP demandait comment verrouiller un fichier existant . La création d'un dossier avec le même nom n'est pas possible. "Un sous-répertoire ou un fichier xxx existe déjà", donc votre réponse ne s'applique pas au problème de la question.
DavidPostill
Dans de nombreux cas, "verrouiller le fichier existant" est nécessaire pour s'assurer que l'application obtiendra une erreur en essayant de la modifier ou de l'ouvrir. Je vais vraiment arrêter d'expliquer des choses évidentes maintenant - passez une bonne journée, monsieur.
noonex