自己试试:
创建一个 XLS 文件,在 Excel 中打开它。
打开 sysinternals Process Monitor,观察在资源管理器中复制 XLS 文件时发生的情况(只需按 ctrl-c ctrl-v)。
连续两次调用 ::CreateProcess
。第一次调用要求读取权限,并被拒绝访问。第二次调用要求读加写加删除并通过。
这正常吗?
最佳答案
如果您使用 FILE_SHARE_READ
打开一个文件,您表示您愿意共享对该文件的访问权限,但仅限于读取。
如果您使用所有标志打开,您也愿意共享写入/删除访问权限。
FILE_SHARE_READ
比 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE
如果某些其他进程 (excel) 打开了此文件,例如写(并且它设置了共享标志),您访问它的唯一方法是接受共享以进行写。
关于windows - CreateFile 如何以 FILE_SHARE_READ 失败并以 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE 成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339882/