对于同步和异步读取操作,ReadFile功能会检查文件结束条件(eof)的不同。当同步读取操作到达文件的末尾时,ReadFile返回TRUE,并将指向的【lpNumberOfBytesRead】变量设置为零。异步读取操作可以在启动调用ReadFile期间或后续异步操作期间遇到文件的结尾。
同步读取操作期间的文件结束测试很简单,如下例所示:
//尝试同步读操作
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
//检查eof
if (bResult && nBytesRead == 0, ) {
//我们在档案的最后
}
异步读取操作期间的文件结束测试更加困难。有三种异步读取操作的最终文件指示符:
* ReadFile返回FALSE,GetLastError返回ERROR_HANDLE_EOF。
* ReadFile返回FALSE,GetLastError返回ERROR_IO_PENDING。
* GetOverlappedResult返回FALSE,GetLastError返回ERROR_HANDLE_EOF。
以下示例显示了在异步读取操作期间如何测试文件结尾:
//尝试启动异步读取操作。
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
//检查是否有问题。
if(!bResult){
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
//在文件末尾。
break;
case ERROR_IO_PENDING:
// I / O pending。
break;
}
}
.
.
.
//检查异步读操作。
bResult = GetOverlappedResult(hFile, &gOverlapped, &nBytesRead, TRUE);
//检查是否有问题。
if(!bResult){
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
//在文件末尾
}
}