在我的Win7 64bit系统中,我使用自己的程序创建了许多文本文件:
hLogFile = CreateFile (LogFileSpec,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,
CREATE_ALWAYS,FILE_FLAG_RANDOM_ACCESS,NULL);
当其中一个文件打开(显示在屏幕上)时,我无法使用以下命令在另一个程序中再次打开它(文件共享冲突):
hSrcFile = CreateFile (SrcSpec,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
但是,当其中一个文件打开(显示在屏幕上)时,我可以使用以下命令在另一个程序中再次打开它:
hFile = fopen(FileSpec,"rb");
有谁知道这里发生了什么?为什么BOTH方法不能以读共享模式打开当前显示的文件?
我真的不想去
回到过去,并使用C运行时库中的fopen()
内容,但是我
在Win32 API中找不到任何可以完成这项工作的东西。有什么想法吗?
答案 0 :(得分:1)
The first CreateFile()
is creating the file for reading AND writing, and is sharing read-only access.
The second CreateFile()
is opening the file for reading only (OK), but is sharing read-only access (sharing violation).
Since the file is opened for writing, and the second call does not include write sharing, the second call fails.
You need to add FILE_SHARE_WRITE
to the second call:
hSrcFile = CreateFile (SrcSpec, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);