Non è tanto/solo questo il problema. Ma una questione tecnica/concettuale che vale molto in generale: all'interno di un file non si possono inserire/eliminare fisicamente i byte. Insomma il contenuto non si può spostare avanti/indietro da un certo punto. Puoi solo: a) appendere (aggiungere) al fondo o b) sovrascrivere byte pre-esistenti. E questo ovviamente non è coerente con l'inserimento (o peggio rimozione) generalizzato di una riga in mezzo!
Sì esiste ma dipende da cosa devi "sapere" per determinare dove inserire la riga. Se sai a priori che la riga va aggiunta ad un ben preciso numero di riga, allora puoi leggere riga per riga tenendo un contatore. Man mano che leggi le righe le scrivi su un nuovo file temporaneo. Raggiunto il numero di riga voluto, inserisci anche la riga nuova, proseguendo poi con le altre lette.
Altrimenti se la determinazione del punto esatto dipende da altri fattori o richiede la conoscenza di tutte le righe, allora devi prima leggere tutto il file e tenere tutte le righe in memoria (es. in una lista), fare le modifiche in memoria e poi riscrivere l'intero file.