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
中,不过表中右下角最后一个错了,这种情况时能打开成功的)
上面的测试代码如下:
CreateFile 一点总结
最新推荐文章于 2022-06-07 18:47:46 发布