Modificare un file ad accesso sequenziale

Con l’accesso sequenziale l’unico modo di modificare un file di testo è:

  1. usare un file temporaneo
  2. ricopiare il file modificato
  3. cancellare il file originale
  4. dare al file temporaneo il nome del file originale

Cancellazione e ridenominazione

Funzioni di cancellazione e ridenominazione nella libreria standard:

//modifica di un file sequenziale

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char matricola[30];
	char nome[50];
	double media_voti;
	
	FILE *f_in;
	FILE *f_temp;
	if ((f_in = fopen("studenti.txt", "r")) == NULL) 
	{
		printf("Il file non può essere aperto\\n");
        exit(-1);
	}
	if ((f_temp = fopen("temp.txt", "w")) == NULL)
	{
		printf("Il file non può essere creato\\n");
        exit(-1);
	}

    fscanf(f_in, "%s %s %lg", matricola, nome, &media_voti);
	while (!feof(f_in))
	{
		if (strcmp(matricola, "002") == 0)
		{
			media_voti = 27.0;
			printf("Sto cambiando la media dei voti di %s\\n", nome);
		}
		fprintf(f_temp, "%s\\t %s\\t %lg\\n", matricola, nome, media_voti);
		fscanf(f_in, "%s %s %lg", matricola, nome, &media_voti);
	} 
	fclose(f_temp);
	fclose(f_in);
	remove("studenti.txt");
	rename("temp.txt", "studenti.txt");
	return 0;
}