测试文件的结尾

【勇芳软件工作室】汉化HomePreviousNext

对于同步和异步读取操作,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:
//在文件末尾
}
}