3

我打开了一个文件

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

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

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

这行得通。但是,我现在想做一个同步写入。WriteFile文件指出

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

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

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

4

2 回答 2

3

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

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

于 2011-07-12T12:47:46.400 回答
0

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

于 2011-07-12T11:48:23.820 回答