Windows 如何锁定文件

一、背景

如果应用程序有操作本地文件的功能(如:读、写、复制、移动、删除等等),那么在测试或调试该应用程序时,肯定需要测试文件被其他应用程序锁定时,你的应用程序是如何处理的。
那么如何在本地模拟文件被锁定的场景,以便测试你的应用程序呢?
这篇文章将总结几种方法来模拟文件被锁定的场景。

二、方案

1. 使用notepad应用程序

在批处理脚本或者cmd命令行窗口,使用如下命令:

notepad >> filetolock
  1. 通过该方式锁定的文件:
    可读、可复制等;不可移动/删除/重命名/执行等操作 (可执行文件将不可执行,如 .bat)
  2. 关闭notepad窗口即可释放锁

2. 使用pausepingtimeout等命令

可以使用延时命令来定时锁定文件,使用方式如下:
1)pause命令

( >&2 pause ) >> filetolock

命令行窗口会显示"请按任意键继续. . .",当按任意键后,即可释放锁定的文件
2)ping命令

( >&2 ping -n 10 127.0.0.1 ) >> filetolock

ping命令执行完,自动释放锁定的文件
3)timeout命令

( >&2 timeout /T 10 /nobreak ) >> filetolock

timeout命令执行完,自动释放锁定的文件

  1. 上述方式锁定的文件,可读、可复制;不可写、不可执行、不可移动或删除;
  2. >&2是将命令输出重定向到handle 2(即标准错误),控制台仍显示命令输出。如果去掉>&2,则命令输出会追加到 filetolock
  3. 其他有延时效果的命令,也可实现锁定文件,如set /pchoicesleep(需要安装)等,读者自行尝试

3. 使用more命令

在dos窗口,使用more命令,也可实现对文件的锁定

more filetolock
  1. 需要注意的是,待锁定的文件如果内容较少不满足分屏显示的条件时,该方法无效(可以通过增加文件内容或者调整dos窗口的大小来改变每屏显示内容大小)
  2. 该方式锁定的文件,可读、可复制;不可写、不可执行、不可移动或删除;

4. 使用wordexcel应用程序

使用操作系统自带的办公软件wordexcel,打开待锁定文件即可将文件锁定

  1. 仅支持文本文件
  2. 该方式锁定的文件,可读、可复制;不可写、不可执行、不可移动或删除;

5. 使用icacls命令

icacls命令可通过访问控制列表(ACL)对指定的文件或目录进行权限控制,详细介绍请参考icacls /?,示例:

icacls "filename" /deny "username":(W,R,D)
icacls "filename" /remove:d "username"
  1. filename是要控制的文件名,username是针对哪个用户进行访问控制,(W,R,D)是权限掩码,分别是"写入(W)",“读取(R)”,“删除(D)”;
  2. /deny 表示显式拒绝指定的用户访问权限,/remove:d 将删除拒绝该SID的所有权限;

6. 使用file.open方法

Windows PowerShell中,使用file.open方法实现锁定文件
格式:Open(String, FileMode, FileAccess, FileShare)
示例:

[System.io.File]::Open('F:\test\testfile.log', 'Open', 'Write', 'None')

打开指定文件,FlieMode=Open打开现有文件,FileAccess=Write对文件进行写访问,FileShare=None谢绝共享当前文件,详情参考:File.Open 方法
示例

  1. 该方式锁定的文件,不可读/写/执行/移动/删除;
  2. 示例中的FileAccess=Write,无论设置为WriteRead还是ReadWrite,对于其它要访问锁定文件的程序而言,都是不可读/写/执行/移动/删除的;
  3. 关闭PowerShell窗口,即可释放文件锁

7. 使用LockFileEx方法

使用Windows API中的LockFileEx方法,以下是用Python语言调用第三方库win32file实现

import win32con
import win32file
import pywintypesp = "yourfile.txt"
f = file(p, "w")
hfile = win32file._get_osfhandle(f.fileno())
flags = win32con.LOCKFILE_EXCLUSIVE_LOCK | win32con.LOCKFILE_FAIL_IMMEDIATELYwin32file.LockFileEx(hfile, flags, 0, 0xffff0000, pywintypes.OVERLAPPED())

关于LockFileEx方法,可参考:lockFileEx 函数

8. 使用第三方工具,如 filelocker

有一些第三方文件锁定工具可以在Windows上阻止其他程序删除或读写文件,如:filelocker
下载 FileLocker.zip 包,解压后使用FileLocker.exe来锁定文件(你可以将其放到path环境变量下的某个路径下,以便全局使用)

使用方法:
FileLocker [/T LockTime] [/I] [/K] [/Q] file [file...]

参数说明
/T LockTime按指定时间锁定文件,单位毫秒
/I无限锁定,直到进程被终止(默认)
/K锁定文件,直到按下键
/Q静默模式,无输出信息,Ctrl+C退出或关闭dos窗口

注意:需要管理员权限来执行 filelocker 命令,否则会报错【Errorcode 5: 拒绝访问】

  1. 该方式锁定的文件,不可读/写/执行/移动/删除;

总结

  1. 以上方法各有优缺点,自行体会;
  2. 方法还有很多,欢迎评论区补充;
  3. 以上方法在Win10测试可行,其他版本系统未测试,自行测试;
  4. 如果你需要手动释放未知程序锁定的文件,你可以:
    a. 打开任务管理器>性能>资源监视器>CPU>关联的句柄
    b. 在关联的句柄搜索句柄,搜索被锁定的文件,在搜索结果进程右键选择终止进程,即可释放锁定的文件。


参考资料

How to purposefully exclusively lock a file?
How can I simulate a “locked” file (one which has a write lock)
How-to: Redirection
File.Open 方法
FileLocker - a small tool to lock files

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28421.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云安装宝塔面板

阿里云安装宝塔面板 1.安装步骤2.需要加入安全组,打开端口3.安装宝塔 1.安装步骤 1.这里主要以阿里云的服务器 ECS为例子,需要安装纯净的系统 创建过程: 这边先用的是免费的: 2.需要加入安全组,打开端口 进入实例选项卡: 快速添加&…

二分类结局变量Logistic回归临床模型预测——分训练集和测试集(完结)

1. 介绍 2. 基线特征 3. 单因素多因素logistic回归分析及三线表 4. 构建临床列线图模型 5. 模型评价 6. 外部数据集验证 7. 另一种发文章的办法,分训练集和测试集,分析上述3-6节的内容 这里就讲一下如何分训练集和测试集,其余的步骤和之前是一样的,分训练集和测试集用…

126、仿真-基于51单片机16×16点阵滚动显示仿真设计(Proteus仿真+程序+配套资料等)

方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

上市公司前端开发规范参考

上市公司前端开发规范参考 命名规则通用约定文件与目录命名HTML命名CSS命名JS命名 代码格式通用约定HTML格式CSS格式JS格式注释 组件组件大小单文件组件容器组件组件使用说明Prop指令缩写组件通讯组件的挂载和销毁按需加载第三方组件库的规定 脚手架使用规范移动端脚手架PC端脚…

Apache HTTPD 多后缀解析漏洞

Apache HTTPD 多后缀解析漏洞 一、环境搭建二、漏洞原理三、漏洞复现 一、环境搭建 如下介绍kali搭建的教程 cd ~/vulhub/httpd/apache_parsing_vulnerability // 进入指定环境 docker-compose up -d // 启动环境docker-compose ps使用这条命令查看当前正在运行的环境 打开…

017 - STM32学习笔记 - SPI读写FLASH(二)

016 - STM32学习笔记 - SPI访问Flash(二) 上节内容学习了通过SPI读取FLASH的JEDEC_ID,在flash资料的指令表中,还看到有很多指令可以使用,这节继续学习使用其他指令,程序模板采用上节的模板。 为了方便起…

Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )

Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS ) 引言 1. 深度优先搜索( DFS )算法概述2. 深度优先搜索( DFS )算法实现实例1:图的 DFS 遍历实例…

MonoDTR Monocular 3D Object Detection with Depth-Aware Transformer 论文学习

论文链接:MonoDTR: Monocular 3D Object Detection with Depth-Aware Transformer 1. 解决了什么问题? 单目 3D 目标检测对于自动驾驶很重要,也很有挑战性。 现有的一些方法通过深度预测网络得到深度信息,然后辅助 3D 检测&…

MySQL约束和查询

约束和查询 1. 约束1.1 约束类型1.2 常用的约束 2. 查询2.1 聚合查询2.1.1 聚合函数2.1.2 GROUP BY2.1.3 HAVING 2.2 联合查询2.2.1 内连接2.2.2 外连接 2.3 合并查询 1. 约束 1.1 约束类型 NOT NULL - 指示某列不能存储 NULL 值。UNIQUE - 保证某列的每行必须有唯一的值。DE…

Python自动获取字母站视频

如果有疑问的话可以在我的谈论群:706128290 来找我 目录 前言 二、编写代码 1.引入库 2.编写主类 3. 自动获取cookies值和生成headers 4.获取命令行参数 运行效果 前言 browser_cookie3 第三方模块 browser_cookie3是browser_cookie模块的分支,…

小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述 Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括: 1、简单易用:设计简单&a…

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表…