...e non capisco perché.
Perché una volta settato il bit di eof non è sufficiente riportare il file pointer all'inizio per resettarlo. Usa lib.clear() per farlo.

Vi chiedo un consiglio o magari se conoscete un algoritmo migliore...
Meglio caricare tutti i record in memoria, invece di spostare il file pointer.
L'esecuzione dell'algoritmo risulta più veloce.