我想在文件上持有排他锁,这样其他任何东西都无法读取或写入该文件。是否有简单的Windows工具或命令来执行此操作?
我想该工具或实用程序将实现LockFileEx Windows Function。
注意:我已经尝试在文本文件上使用记事本和Notepad ++之类的文本编辑器,但是它们没有对此文件的排他锁。
我想在文件上持有排他锁,这样其他任何东西都无法读取或写入该文件。是否有简单的Windows工具或命令来执行此操作?
我想该工具或实用程序将实现LockFileEx Windows Function。
注意:我已经尝试在文本文件上使用记事本和Notepad ++之类的文本编辑器,但是它们没有对此文件的排他锁。
Answers:
尝试使用Easy File Locker(免费软件)。
更简单的解决方案:在感兴趣的目录中,从cmd行运行:
notepad >filetolock
作为重定向的标准输出,它将保持锁定状态,直到终止应用程序(记事本)。
请注意,“ filetolock”将被重定向覆盖,因此您可能不想使用任何重要的现有文件。空的“ filetolock”与您要测试的应用程序无关,因为该应用程序无论如何都无法打开它。
notepad >>filetolock
没有第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()
[void](Read-Host 'Press Enter to continue')
,$host.UI.RawUI.ReadKey(...)
在Powershell ISE的伪控制台中不支持使用ReadKey作为替代。
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.
我无法写评论,所以我以这种方式添加信息:
编辑:其他问题的摘要:
暂停命令: ( >&2 pause ) >> file2lock.txt
MS程序(例如word或excel锁)也适用(适用于文本文件)
以编程方式LockFileEx
(Windows API)与LOCKFILE_EXCLUSIVE_LOCK
和LOCKFILE_FAIL_IMMEDIATELY
我通过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"
将“ 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键,文件夹将被锁定。
再次运行批处理文件,然后输入密码,文件夹和所有文件将再次被解锁。