我正在尝试同时在两个不同的应用程序中读取日志文件。但是使用共享模式#FILE_SHARE_READ 的CreateFile ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx ) 在第二次调用时总是失败并出现错误-代码 32: ERROR_SHARING_VIOLATION: - 进程无法访问该文件,因为它正被另一个进程使用。
当日志文件以 FILE_SHARE_WRITE 或 FILE_SHARE_READ 模式写入时 | FILE_SHARE_WRITE 只有当 FILE_SHARE_READ 用于 writer-application 时,两个应用程序中的任何一个都无法读取文件,然后它仅在 reader-applications 使用 FILE_SHARE_WRITE 或 FILE_SHARE_READ | 时才有效。#FILE_SHARE_WRITE,而不是在使用 #FILE_SHARE_READ 时。奇怪....有什么建议吗?
非常感谢你。
修正案:
Writer-Application: CreateFile(file,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
Reader-Applications: CreateFile(file,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
修正 2:
当使用来自第一修正案的调用时,第一个阅读器应用程序可以成功获取文件句柄,但第二个阅读器应用程序将失败并出现 ERROR_SHARING_VIOLATION。
修正 3:有人指出我的解决方案!
问题是我使用逻辑或而不是按位或共享模式:FILE_SHARE_READ 或 FILE_SHARE_WRITE = 1 或 2 = 1,但它应该是 FILE_SHARE_READ | FILE_SHARE_WRITE = 1 | 2 = 3。因此无法作为 Writer-Application 所需的 FILE_SHARE_WRITE 工作。