CreateFile 一点总结

CreateFile的函数原型如下:


其中dwDesiredAccess的值可以为 GENERIC_READ, GENERIC_WRITE, GENERIC_READ | GENERIC_WRITE
dwShareMode可以为FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE。

关于这两个参数,MSDN里面有说明:
dwDesiredAccess 代表当前这个文件句柄可以做的操作,比如read, write, 或二者都有
dwShareMode 代表当前文件句柄没有关闭的同时,如果再打开同一个文件,那个新文件句柄可做的操作。

也就是:



在这里,da2和sm1不能有冲突,同时sm2和da1不能有冲突,否则第二次打开将失败,hFileOpen 将为INVALID_HANDLE_VALUE

这四个值的有效组合如下 :
(左边一列代表第一次打开时的组合,上面一列代表第二次打开同一文件的组合,
.代表第二次打开成功,X代表失败)


举个例子,当da1 = R, sm1 = W,
这时由于 da2 不能和 sm1 冲突,只能为W
sm2 不能和 da1 冲突,只能为 R 或 RW
也就是以GENERIC_READ / FILE_SHARE_WRITE 打开文件后,
如果再次打开文件就必须以 GENERIC_WRITE / FILE_SHARE_READ
或GENERIC_WRITE / FILE_SHARE_READ|FILE_SHARE_WRITE 方式打开,其他打开方式都会出错。

(注:MSDN中也有这样一张表,在
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/fileio/fs/creating_and_opening_files.htm
中,不过表中右下角最后一个错了,这种情况时能打开成功的)

上面的测试代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值