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 pywintypes

p = "yourfile.txt"
f = file(p, "w")
hfile = win32file._get_osfhandle(f.fileno())
flags = win32con.LOCKFILE_EXCLUSIVE_LOCK | win32con.LOCKFILE_FAIL_IMMEDIATELY

win32file.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.mfbz.cn/a/41682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#(六十二)之泛型的约束

类型约束 基类约束有两个重要的目的。 1:它允许在泛型类中使用有约束指定的基类成员。 2:确保只能使用支持指定基类或派生类的类型实例。 约束是使用 where 上下文关键字指定的。 下表列出了五种类型的约束: 约束 说明 T:str…

chrome edge svg转png

chrome edge svg转png 生成SVG blockdiag Live Preview 导出png 截图: 左上角截取屏幕截图

Redis进阶底层原理 - 客户端集群方案

Redis集群一般来说会存在多个主节点,用于数据分区。对于客户端来说只会连接到某一个Redis主机节点。那客户端如果使用集群?方案如下: 原图地址:

2. CSS3的新特性

2.1 CSS3的现状 ●新增的CSS3特性有兼容性问题, ie9才支持 ●移动端支持优于PC端 ●不断改进中 ●应用相对广泛 ●现阶段主要学习: 新增选择器和盒子模型以及其他特性 CSS3给我们新增了选择器,可以更加便捷,更加自由的选择目标元素: 1.属性选择器 2.结构伪类选择器…

微信小程序源码反编译(wxss样式无法恢复的问题)

背景:从微信小程序源码上线后,网上一直有大神写程序来反编微信小程序的源码,不过现在来看基本都不能用了,有的能用也不能获取样式wxss文件,经过我的不懈努力,找到一些办法,接下来我会一步步讲。…

C\C++ 使用ping判断ip是否能连通

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: ping是一种用于测试网络连接的工具,它通过发送数据包到目标设备并等待其响应来工作,以检查网络是否连通。下面是例子. 效果: 代码…

简单认识框架

hi,大家好,好久不见今天为大家带来框架相关的知识 文章目录 🌸1.框架🥝1.1为什么要学习框架 🌸2.框架的优点🥝2.1采用servlet创建项目👀2.1.1缺陷 🥝2.2采用SpringBoot创建项目👀2.2.1优势 &…

上市公司Git分支管理规范

Git分支管理策略 主分支Master 首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主…

Bring Your Data!Self- supervised Evolution of Large Language Models

Bring Your Data!Self- supervised Evolution of Large Language Models IntroductionMethod参考 Introduction 这篇论文提出了一种自监督的评估方式来衡量大型语言模型的能力和局限性。常规的基于数据集的评估方式存在一些缺点: 需要不断新建数据集。存在数据集和…

SQL-每日一题【607.销售员】

题目 表: SalesPerson 表: Company 表: Orders 编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例: 解题思路 1.我们可以用子查询来解决这道题,…

试玩python的web框架 flask、fastapi、tornado、django

文章目录 一、Flask入门案例 [官网](https://flask.net.cn/quickstart.html) [其它参考](https://zhuanlan.zhihu.com/p/104273184?utm_id0)二、FastAPI入门案例 [官网](https://fastapi.tiangolo.com/zh/) [w3cschool教程](https://www.w3cschool.cn/fastapi/fastapi-feature…

Apikit 自学日记:私有云才有的测试文件库功能,该如何使用呢

在 APIkit 的私有云版本中,提供了测试文件库功能。不过目前该功能仅供私有云产品,线上SaaS产品不提供测试文件库功能 API自动化测试中可以添加文件参数。在这里统一管理所有测试文件。 在测试文件库界面,点击上传文件: 在私有云产…

Unity游戏源码分享-射击游戏Low Poly FPS Pack 3.2

Unity游戏源码分享-射击游戏Low Poly FPS Pack 3.2 项目地址:https://download.csdn.net/download/Highning0007/88057717

【AT89C52单片机项目】数字密码锁设计

实验目的 使用单片机设计数字密码锁。 实验仪器 一套STC89C52RC开发板套件,包括STC89C52RC开发板,以及USB烧录线。 设计要求 1、有设置密码、开锁工作模式; 2、可以每次都设置密码,也可以设置一次密码多次使用。 实验原理 …

香港视频直播服务器需要多大的带宽(带宽计算方式)

​  香港视频直播服务器需要多大的带宽(怎么计算带宽大小)。目前短视频行业兴起,有许多人也想利用香港服务器搭建一个直播平台,但无奈不知道怎么选择资源大小,或者说什么样的配置能够满足直播的需求。关于直播的带宽大小和流量消耗的计算同…

django报错设置auth User

1.报错:auth.User.groups... auth.User.user_permissions... 我们的用户组、用户权限只能关联一个用户 ,我们自己定义了一个用户表,系统还有一个用户表,这时候就会出问题。 解决办法: 让给我们自己定义的user替换系…

【C++修炼之路】类和对象(下)—— 完结篇

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:C修炼之路 文章目录 一、再谈构造函数1、初始化列表2、explicit 关键字 二、static 成员1、概念2、特性 三、友元1、友元函数2、友元类 四、内部类五…

【hadoop】部署hadoop的伪分布模式

hadoop的伪分布模式 伪分布模式的特点部署伪分布模式hadoop-env.shhdfs-site.xmlcore-site.xmlmapred-site.xmlyarn-site.xml对NameNode进行格式化启动Hadoop 对部署是否完成进行测试免密码模式免密码模式的原理(重要)免密码模式的配置 伪分布模式的特点…

【基于 GitLab 的 CI/CD 实践】03、GitLab Pipeline 实践(上)

目录 一、GitLab Pipeline 流水线语法有哪些?流水线参数列表 如何检查语法错误?流水线语法检测 二、Pipeline 基础语法 job script before_script after_script stages 未定义 stages ​定义 stages 控制 stage 运行顺序 .pre & .post …

哇~真的是你呀!今天是LINUX中的RSYNC服务

目录 前言 一、概述 二、特性 三、rsync传输模式 四、rsync应用 五、格式 六、配置文件 七、守护进程传输 八、rsyncinotfy实时同步 一、概述 rsync是linux 下一个远程数据同步工具;他可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync 算法减少数据的…