当你通过
OVERLAPPED
WriteFile()
/
ReadFile()
当使用
同步的
文件句柄,函数将在
重叠
重叠
之后
写入/读取的字节。你也路过了
重叠
双方
WriteFile()
和
ReadFile()
,但您不是在倒带
重叠
在传递给之前的偏移量
ReadFile()
所以
ReadFile()
ULARGE_INTEGER ulOffset;
...
ulOffset.QuadPart = 0; // or whatever offset you need
positionalData.Offset = ulOffset.LowPart;
positionalData.OffsetHigh = ulOffset.HighPart;
WriteFile(hMappedFile, ..., &positionalData);
...
ulOffset.QuadPart = 0; // or whatever offset you need
positionalData.Offset = ulOffset.LowPart;
positionalData.OffsetHigh = ulOffset.HighPart;
ReadFile(hMappedFile, ..., &positionalData);
当您传递NULL而不是
重叠
结构中,函数将从文件句柄本身中存储的当前文件偏移量开始写入/读取字节,然后更新句柄以存储新的文件偏移量
之后
写入/读取的字节。因此,如果使用相同的文件句柄进行写入和读取,则必须使用
SetFilePointer()
或
SetFilePointerEx()
:
LARGE_INTEGER liOffset;
...
liOffset.QuadPart = 0; // or whatever offset you need
SetFilePointerEx(hMappedFile, liOffset, NULL, FILE_BEGIN);
WriteFile(hMappedFile, ..., NULL);
...
liOffset.QuadPart = 0; // or whatever offset you need
SetFilePointerEx(hMappedFile, liOffset, NULL, FILE_BEGIN);
ReadFile(hMappedFile, ..., NULL);
也就是说,您正在使用
FILE_FLAG_NO_BUFFERING
旗
非常严格的限制
在文件I/O操作期间,文件偏移量、缓冲区地址和缓冲区大小可以是什么。有关使用该标志时必须遵循的特定规则的详细信息,请阅读MSDN文档:
File Buffering