同步写入使用FILE_FLAG_OVERLAPPED打开的文件

我已经打开了一个文件

HANDLE handle= CreateFileW( fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); 

然后,文件句柄用于异步读取操作:

 ReadFile(handle, buffer, 1, NULL, &overlapped); 

这很有效。 但是,我现在想要进行同步写入。 WriteFile文档说明了这一点

如果使用FILE_FLAG_OVERLAPPED打开hFile,则以下条件有效:
•lpOverlapped参数必须指向有效且唯一的OVERLAPPED结构,否则该函数可能会错误地报告写操作已完成。

省略lpOverlapepd参数时, GetLastError()返回ERROR_INVALID_PARAMETER 。 打开两个句柄,一个用于读取,一个用于写入也不起作用,因为第二个句柄产生ERROR_ACCESS_DENIED错误。

如何打开异步读取和同步写入的文件? 我不想不必要地增加代码复杂性。

可以通过为写入操作创建手动复位事件,写入文件(使用重写结构中的事件进行写入操作)然后立即等待事件来实现同步写入。

根据您的异步读取是否需要与写入异步,您可能需要确保使用兼容的等待,以便可以调用读取完成例程,否则将进行读取并且数据将存储在缓冲区中但是你无法处理它。

打开两个句柄,一个用于异步读取另一个用于同步写入,只需确保设置文件共享属性(FILE_SHARE_READ|FILE_SHARE_WRITE) 。 没有测试过。