1. Windows文件锁定机制深度解析
在Windows系统下保护文件不被意外删除,本质上是一个资源访问控制问题。许多开发者常犯的错误是混淆了文件属性控制与文件锁定机制的区别。文件属性(如只读属性)仅影响写入操作,而真正的文件保护需要从系统内核对象层面进行控制。
Windows内核通过文件对象(File Object)管理所有打开的文件,每个文件对象都包含共享模式(Share Mode)信息。当进程A打开文件时,可以通过指定共享模式来声明"我愿意与其他进程共享哪些操作权限"。如果进程B试图以冲突的方式访问该文件,系统会根据两个进程的共享模式设置来决定是否允许。
关键理解:文件删除操作在Windows系统层面被归类为"删除访问权限"(DELETE权限),这与普通的写入权限(WRITE)是完全独立的控制维度。这也是为什么只设置只读属性无法防止删除的根本原因。
2. CreateFile API的正确使用姿势
2.1 核心参数解析
CreateFile函数的完整签名如下:
cpp复制HANDLE CreateFile(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
其中关键参数是dwShareMode,它接受以下标志的组合:
FILE_SHARE_READ:允许其他进程读取FILE_SHARE_WRITE:允许其他进程写入FILE_SHARE_DELETE:允许其他进程删除或重命名
2.2 防删除配置方案
要实现防删除效果,必须确保:
- 调用
CreateFile时不包含FILE_SHARE_DELETE标志 - 保持文件句柄处于
