我已经使用
打开了一个文件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
参数,则ERROR_INVALID_PARAMETER
会返回GetLastError()
。打开两个句柄,一个用于读取,一个用于写入也不起作用,因为第二个句柄产生ERROR_ACCESS_DENIED
错误。
如何打开异步读取和同步写入的文件?我不想不必要地增加代码复杂性。
答案 0 :(得分:2)
可以通过为写入操作创建手动复位事件,写入文件(使用重写结构中的事件进行写入操作)然后立即等待事件来实现同步写入。
根据您的异步读取是否需要与写入异步,您可能需要确保使用兼容的等待,以便可以调用读取完成例程,否则将进行读取并将数据存储在缓冲区,但你无法处理它。
答案 1 :(得分:0)
打开两个句柄,一个用于异步读取另一个用于同步写入,只需确保设置文件共享属性(FILE_SHARE_READ|FILE_SHARE_WRITE)
。没有测试过。