WinAPI使用SetfilePointer来测试EOF

时间:2013-05-18 15:08:56

标签: c winapi file-io

大家好我想用

测试EOF
SetFilePointer(fi1, 0, NULL, FILE_CURRENT) != INVALID_SET_FILE_POINTER 

或?

SetFilePointer(fi1, 1, NULL, FILE_CURRENT) != INVALID_SET_FILE_POINTER

MSDN Documentation

1 个答案:

答案 0 :(得分:2)

这两种方法都没有。第一个不会检测到EOF,第二个会移动文件指针,我猜这不是你想要的。

您应该使用SetFilePointerEx的“移动方法”并且距离为零来调用FILE_CURRENT来读取文件指针。并将其与文件大小进行比较,通过调用GetFileSizeEx获得。

LARGE_INTEGER pos, size;
if (!SetFilePointerEx(hfile, 0, &pos, FILE_CURRENT))
    HandleError();
if (!GetFileSizeEx(hfile, &size))
    HandleError();
bool eof = (pos.QuadPart == size.QuadPart);