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.mzph.cn/news/4367.shtml

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

相关文章

Ceph(分布式文件系统)

Ceph(分布式文件系统) 1、存储基础 单机存储设备 ●DAS(直接附加存储,是直接接到计算机的主板总线上去的存储) IDE、SATA、SCSI、SAS、USB 接口的磁盘 所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储 ●NAS&#xf…

缓存滚动位置:解决keep-alive组件缓存滚动位置失败问题

怎样在vue中缓存组件?大家都知道,使用keep-alive组件即可,但是使用keep-alive缓存页面后,发现虽然页面缓存成功了,但是列表的滚动条又自动回到了最上方。 是的,keep-alive组件是不会缓存滚动位置的。 怎样…

基于springboot的地铁轨道交通运营系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【网站搭建】3 更换博客主题—butterfly

可以到官网选择想要更换的主题Themes | Hexo 我选用的是butterflyzhangzeli/hexo-theme-butterfly: A Hexo Theme: Butterfly (github.com) 在Hexo根目录打开终端执行拉去操作 下载配套文件 npm install hexo-renderer-pug hexo-renderer-stylus 打开_config.yml文件&#xf…

TCP实现FTP功能

目录 server client makefile 运行顺序 FTP(File Transfer Protocol)是一种用于在计算机网络上传输文件的标准协议。 它允许用户通过网络将文件从一个计算机(称为FTP服务器)传输到另一个计算机(称为FTP客户端&…

配置右键点击文件夹通过IDEA打开项目

0、 前言 你是不是每次打开idea项目时,都需要走一遍这样的流程: 1、先启动idea 2、然后手动选择项目路径 3、打开项目 于是在打开项目的路上就耗费了大量的时间。 这篇文章会教你通过配置,让项目可以直接通过右键打开,大大提升项…

XR应用云流化,多方面提升 XR 扩展现实体验!

无论是使用户能够协作设计电动赛车,还是帮助观众通过数字世界与自然互动,越来越多的企业利用XR扩展现实为用户提供沉浸式逼真的虚拟环境。 下一代沉浸式技术的应用越来越广泛,图形和人工智能的最新突破正在扩展XR的功能。这四种技术正在XR生态…

uniapp中refs获取打印是空对象{}的解决办法

场景复现 版本如下: "dcloudio/uni-app": "2.0.2-3080720230703001", "vue": "> 2.6.14 < 2.7", 开发中发现只要是view这些原始标签的ref都无法在任何地方获取到refs.xxx, 而组件标签如<myStep></myStep> 这种加ref…

rust声明式宏

宏 在 rust 中&#xff0c;我们一开始就在使用宏&#xff0c;例如 println!, vec!, assert_eq! 等。看起来宏和函数在使用时只是多了一个 !。实际上这些宏都是声明式宏&#xff08;也叫示例宏或macro_rules!&#xff09;&#xff0c;rust 还支持过程宏&#xff0c;过程宏为我们…

【java】【基础1】数据类型运算符

目录 一、数据类型&#xff08;4大类8种&#xff09; 1.1类型转换 1、自动类型转换 2、表达式的自动类转换 3、强制类型转换 二、运算符 2.1基本算术运算符 2.2自增自减运算符 2.3赋值运算 2.4关系运算符 2.5逻辑运算符 2.6三元运算符 2.7运算符的优先级 三、API文档&am…

ffmpeg相关API(2)

av_find_input_format() /*** 根据输入格式的短名称查找AVInputFormat。 */ ff_const59 AVInputFormat *av_find_input_format(const char *short_name); avformat_open_input() /*** 打开一个输入流并读取头。编解码器未打开。 * 必须使用avformat_close_input&#xff0…

学习记录——SAM、SPM

Segment Anything Model&#xff08;SAM&#xff09; 能分割一切的模型 2023 SAM是一个提示型模型&#xff0c;其在1100万张图像上训练了超过10亿个掩码&#xff0c;实现了强大的零样本泛化。许多研究人员认为「这是 CV 的 GPT-3 时刻&#xff0c;因为 SAM 已经学会了物体是什…

ffmpeg 采集音频数据

音视频数据采集的步骤&#xff1a; 设备注册设置对应的采集方式&#xff0c;avfoundation、dshow、alas打开设备 具体的例子: #include <stdio.h> extern "C"{#include <libavutil/avutil.h>#include <libavdevice/avdevice.h>#include <lib…

世界上很少人知道的网站

1.此人不存在 点击此处打开 2.彩虹屁生成器(夸夸神器&#xff09; 点击此处打开 3.小鸡词典 点击此处打开 4.SHADIAO图片动起来 点击此处打开 5.中午吃什么网 点击此处打开 6.广告门 点击此处打开 嘘&#xff01;这是一个秘密&#xff0c;我只告诉你&#xff0c;别告诉其…

高级教程之ui运行神器

windows chocolatey官网&#xff1a;https://chocolatey.org/ powershell管理员权限下运行: Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex…

F#奇妙游(14):F#实现WPF的绑定

WPF中的绑定 绑定在UI开发中是一个非常重要的概念&#xff0c;它可以让我们的UI界面和数据模型之间建立起联系&#xff0c;当数据模型发生变化时&#xff0c;UI界面也会随之变化&#xff0c;反之亦然。这样的好处是显而易见的&#xff0c;我们不需要手动去更新UI界面&#xff…

Vue试听本地磁盘的音频

Vue试听本地磁盘的音频 问题描述&#xff1a; 项目中涉及到一个报警声音选择&#xff0c; 有一个试听的功能&#xff0c; 试听后觉得可以才把file文件传给服务端&#xff0c;需要前端自己实现试听本地磁盘的音频&#xff1b; 主要代码如下&#xff1a; <template><di…

Unity 任意数据在Scene窗口Debug

任意数据在Scene窗口Debug &#x1f354;效果&#x1f96a;食用方法 &#x1f354;效果 如下所示可以很方便的把需要Debug的数据绘制到Scene中&#xff08;普通的Editor脚本只能够对MonoBehaviour进行Debug&#xff09; &#x1f96a;食用方法 &#x1f4a1;. 新建脚本继承Z…

MongoDb基本使用

MongoDB基本使用 Nosql简介 在现代的计算系统上每天网络上都会产生庞大的数据量&#xff0c; 这些数据有很大一部分是由关系数据库管 理系统&#xff08;RDBMS&#xff09;来处理。 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared d…

目标检测算法:FPN思想解读

目标检测算法&#xff1a;FPN思想解读 说明 ​ FPN算法一种方法/思想&#xff0c;在许多的模型架构中都经常采用&#xff0c;也是提高模型精度的重要方法。 免责申明 ​ 有误写/错写/错误观点/错误解读&#xff0c;或者大家有其它见解&#xff0c;都可以在评论区指出&#xff0…