Sul fatto che sarebbe più semplice in assembler sono molto daccordo con te infatti io preferisco l'assembler al c++
comunque cio e dovuto alle strutture del linguaggio.
i file devono essere aperti in contemporanea sia il file da leggere che il file di comodo,temporaneo.
poi inizi a leggere il file come se volessi utilizzare il record ma non lo utilizzi e li conti
una volta che sei arrivato al numero di record che vuoi levare dal successivo inizi a scrivere.
comunque l'errore che hai fatto stà nella seconda dichiarazione di fp e cioè
fp = fopen("c:/test_w.txt","w");
perchè se tu avevi già definito
fp = fopen(file_name,"r")
è normale che il programma vada in confusione.
prova a definire
fp = fopen(file_name,"r")
mentre il file da scrivere lo definisci
fp1 = fopen("c:/test_w.txt","w");
parlando in maniera assembler utilizzando fp e fp1
è un poco come se tu avessi 2 handle file.
mentre come hai fatto tu e come se utilizzassi un solo handle file che vai a modificare ogni volta che utilizzi un file.