1
嗨,大家好。如果我想用WinAPI的使用SetfilePointer测试EOF
SetFilePointer(fi1, 0, NULL, FILE_CURRENT) != INVALID_SET_FILE_POINTER
或测试EOF?
SetFilePointer(fi1, 1, NULL, FILE_CURRENT) != INVALID_SET_FILE_POINTER
嗨,大家好。如果我想用WinAPI的使用SetfilePointer测试EOF
SetFilePointer(fi1, 0, NULL, FILE_CURRENT) != INVALID_SET_FILE_POINTER
或测试EOF?
SetFilePointer(fi1, 1, NULL, FILE_CURRENT) != INVALID_SET_FILE_POINTER
无论是确实的伎俩。第一个不会检测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);
请记住,文件指针可以大于文件大小。例如,SetFilePointer/Ex(> filesize)后跟SetEndOfFile()通常用于展开或预先分配文件。所以你应该在比较中使用'> ='而不是'=='。 –