Generalmente io apro e chiudo i file proprio per evitare perdite di dati. Questo lo faccio sin da quando programmavo sui computer.
Potresti alternativamente svuotare il buffer interno con flush:
in questo modo il file non viene chiuso ma il contenuto della ram viene comunque scritto fisicamente sul file.