30

Is there a way to lock a file with on-board tools so it can't be deleted or overwritten?

For testing of copy scripts I need to lock files temporarily to check the error handling in the scripts. Till XP I used loading a file in debug.exe to lock it.

Is there a way in Windows 7 (and later)?

Edit
I know that there are programs doing this. My question is if there is a built in mechanism in windows. Sometimes I have to check a script on a PC and don't want to install new programs for that.

Edit2
Here are also good suggestions: How to purposefully exclusively lock a file?, which, however, need 3rd party tools or change the file to be locked.

3
  • Does the notepad trick work for you?
    – nixda
    Dec 28, 2014 at 17:02
  • 1
    @nixda No. It overwrites the file. I need to lock a present file without changing it. Dec 28, 2014 at 17:08
  • I see. I retract my close vote
    – nixda
    Dec 28, 2014 at 17:14

5 Answers 5

56

I think PowerShell is probably the neatest way to accomplish this. Something like the following:

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

While paused, the above script causes the following prompt when attempting to open up "myfile.txt":

enter image description here

4
  • 2
    Great! Thanks! To my shame, I must confess that I develop in powershell and did not think about using the .net classes for this. [I hope that will not go any further :-)] Dec 28, 2014 at 14:49
  • 1
    Nice answer. For the curious, here's the MSDN link to the File::Open method detailing the parameters of the call (specifically, the last argument, 'None', declines sharing the file with any other threads/processes - and likewise, provisions exist to lock the file for read/write only, or a combination thereof). Dec 28, 2014 at 20:23
  • 1
    @moab The file is closed and the handle released at the end.
    – Dan
    Dec 28, 2014 at 22:43
  • 3
    Note the $host.UI.RawUI.ReadKey(...) will fail in PowerShell ISE as ReadKey is not implemented for the ISE. The workaround is [void](Read-Host 'Press Enter to continue'). Not exactly the same as the user has to press Enter rather than any key. However, good enough for most purposes. The workaround came from this blog post: jeffwouters.nl/index.php/2016/06/…
    – Simon Elms
    Sep 7, 2016 at 4:10
4

Since I don't like installing software that I won't actually use, I found this jewel of a 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)"

All credit goes to Torgeir Bakken, you can see the full post here: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/

1
  • Nice for those who don't like powershell like the solution above Feb 1, 2016 at 14:45
0

Can you not mark it as read-only? This would effectively "lock" the file by not allowing it to be changed or deleted.

The attrib.exe command is available at the command line, and will allow you set a file or directory to be read-only. More info on that command can be found here

Conversely, you can do the same thing through the GUI by right-clicking the file or directory they you want to mark read-only, selecting properties, and ticking the Read-only box. Clicking Apply/Ok then applies the new setting to the file or directory.

1
  • 4
    The read-only attribute only prevents from modifications but not from deletions.
    – ComFreek
    Dec 28, 2014 at 15:25
0

Would it not be possible to limit the accessibilty to the file with the Security Tab, when you right-click and go to Properties for the File or Folder?

If the user has the Admin access to the PC, then would this not allow him to remove all others ability to do anything with the file/folder?

I have to admit as I type, that my work PC is still on WinXP Pro, so what I stated above may not be available any longer - I am still not as comfortable with my new Win 8.1 Pro box at home as I am with the years of working with Win XP

1
  • None of the available NTFS permissions would mimic the behavior of a locked file. The closest would be making the file read-only, but we can be sure the OP is aware of that option and is asking about locking the file for a good reason. Feb 19, 2018 at 14:52
-2

In some scenarios creating new folder with name of the file may do the job. (I.e. get an error trying to open the file).

4
  • This is really a comment and not an answer to the original question.
    – DavidPostill
    May 25, 2016 at 11:43
  • For me it was the answer in task which lead me to this page. Because of people like you somebody will not find it in their similar task.
    – noonex
    May 26, 2016 at 3:13
  • 4
    OP was asking how to lock an existing file. Creating a folder with the same name is not possible. "A subdirectory or file xxx already exists" so your answer is not applicable to the problem in the question.
    – DavidPostill
    May 26, 2016 at 9:02
  • I many cases "lock existing file" is needed to make sure that application will get an error trying to modify or open it. I really will stop explaining obvious things now - have a good day, sir.
    – noonex
    May 26, 2016 at 11:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .