如何故意排他地锁定文件?


87

我想在文件上持有排他锁,这样其他任何东西都无法读取或写入该文件。是否有简单的Windows工具或命令来执行此操作?

我想该工具或实用程序将实现LockFileEx Windows Function。

注意:我已经尝试在文本文件上使用记事本和Notepad ++之类的文本编辑器,但是它们没有对此文件的排他锁。


为什么不做一个呢?另外,他们应该持锁多长时间?他们应该等待一些事件吗?
Mehrdad

6
我考虑过编程,但认为可以使用一种快速的工具,编辑器或命令。在超级用户上,并非所有用户都是程序员。bit.ly/lXT6ey我不想走这个问题的Stackoverflow路线。正在测试应用程序无法访问文件时的行为。
约翰·K

我也许能为您做一个-仅让我知道何时应释放锁。
Mehrdad


显然,诸如Notepad和Notepad ++之类的编辑器甚至都不会非专有地打开文件。
约翰,

Answers:


23

尝试使用Easy File Locker(免费软件)。

在此处输入图片说明


在Windows 2003上不起作用
Eric Bonnot 2014年

14
该应用程序似乎并没有“锁定”文件,而是更改文件的权限。如果要尝试测试应用程序如何处理由另一个应用程序主动打开/锁定的文件,这是一个重要的区别。就我而言,此应用程序无法正常工作。“记事本>文件”解决方案应该是这里的答案。
javajavajavajavajava

1
在Windows 10上不起作用。并且可以卸载。谨防!!
Shahar Prish,

此应用程序在Windows 10上导致了多个蓝屏崩溃。该应用程序还旨在通过权限更改而不是进程锁定文件来创建不可访问的文件。使用@ RRKbabxW3的答案中的FileLocker效果很好。
约旦·麦克

进入蓝屏死机在Windows 10
古普塔

137

更简单的解决方案:在感兴趣的目录中,从cmd行运行:

notepad >filetolock

作为重定向的标准输出,它将保持锁定状态,直到终止应用程序(记事本)。

请注意,“ filetolock”将被重定向覆盖,因此您可能不想使用任何重要的现有文件。空的“ filetolock”与您要测试的应用程序无关,因为该应用程序无论如何都无法打开它。


38
使用附加重定向代替现在覆盖filetolock:notepad >>filetolock
eadmaster 2014年

5
非常有用的解决方案,无需安装任何东西
Aprillion 2014年

5
这是比下载更多免费软件更好的解决方案。
BenCr 2014年

9
仍然可以在Windows 10上使用。应该是公认的答案
SoonDead 2015年

8
由于某些原因,必须在cmd.exe中执行。它在PowerShell中不起作用。已创建文件并打开了记事本,但是即使打开了记事本,您仍然可以删除文件。我测试了这两种在Windows Server 2012和Windows 10
威乐萨洛宁

32

没有第3方工具即可锁定文件,不会更改被锁定的文件,甚至无法复制文件

此PowerShell脚本引用了类似问题的答案。

如果您认为有帮助,则可以使用原始答案,而不是本帖。

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

2
我发现这是唯一可行的解​​决方案。记事本和EasyFileLocker方法都不能完全锁定文件,仍然可以复制(在Windows 10上测试)
HypeZ 2016年

对于Powershell ISE [void](Read-Host 'Press Enter to continue')$host.UI.RawUI.ReadKey(...)在Powershell ISE的伪控制台中不支持使用ReadKey作为替代。
SimonTewsi


11

FileLocker是一个免费软件/开源命令行工具。

用法:

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.

1
在其他解决方案
无法解决的情况

2
请注意,在Windows 10上,它必须以管理员身份运行。
cowlinator '18


1

这是我复制锁定文件的用户行为以进行错误测试的方式。

Dim s作为新StreamReader(“ C:\ test \ sampleFile.txt”)

我将该行添加到单元测试中以锁定文件,然后在调试模式下运行测试以复制给定文件被锁定时的不良行为。

我仍然不知道我的业务用户如何锁定给定的文件。如您所说,记事本不能专门锁定它。

幸运的是,除非另外指定,否则声明流读取器将仅锁定文件。


1

我通过marsh-wiggle提出解决方案。这是我的脚本版本:

# 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." 
}

您可以像这样从cmd调用它:

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

0

为了测试Robocopy错误“访问被拒绝”,我刚刚删除了用户的读取权限。那行得通吗?

对于Windows 10,可以从命令行轻松完成

chmod'ur'锁定文件

对于Windows 7,可以使用文件资源管理器安全性属性。


-2

将“ Your-Password-Here”替换为您的密码,然后将此脚本另存为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*

运行批处理文件时,它将显示“确定要锁定文件夹(是/否)”提示;输入Y,然后按Enter键,文件夹将被锁定。

再次运行批处理文件,然后输入密码,文件夹和所有文件将再次被解锁。


2
这仅适用于文件夹,更糟糕的是,它重命名了文件夹。那根本不会做。
Twisty模仿者,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.