Modifier un fichier en C

Fermé
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 - 31 mars 2005 à 19:33
 SKZ81 - 2 avril 2005 à 00:01
salut , j' ai un souci avec un fichier en C. Mon pg permet les gestion des absences, des retard et des retenues par trimestre. Voila j'ai la structure suivante :
struct eleve
{
  int identifiant;
  char nom[LG];
  char prenom[LG];
  char classe[LG];
  char numtel[LG];
  int retard;
  int absence;
  int retenue;
  int retard_trim1;
  int absence_trim1;
  int retenue_trim1;
}seleve ;


je voudrais grace a une fonction reinitialiser les champs retard, absences et retenues pour les mettre dans les champs retard_trim1, absences_trim1 et retenues_trim1, pour ensuite les remettre a 0. J'ai essayé comme ça :
void reinit_eleve()
{
       		
	char rep;
	int compteur;
	printf("Vous allez reinitialiser \n\nles -retenues\nles -absences\nles -retards\n\ndu trimestre en cours\n");
	printf("Voulez vous continuez ?\n");
	scanf("%c",&rep);
	flushall();


	fichier_eleve=fopen("fichier1_eleve","wb");//on ouvre le fichier
	if((rep=='o')|| (rep=='O'))
	{
		while (fread (&seleve, sizeof(seleve),1,fichier_eleve) != 0)//tant qu'on lit dans le fichier
		{
		fseek(fichier_eleve,sizeof(seleve)*(seleve.absence),SEEK_SET);	
		seleve.absence_trim1=seleve.absence;
		compteur=compteur+1;
		}
    }//fin if            
	else
	{
		printf("Il n'y a pas d'eleve dans la base...\n\n");
	}

	fseek(fichier_eleve,sizeof(seleve)*(seleve.absence),SEEK_SET); //SEEK SET faire bouger le curseur du pointeur
	//on se replace a l'endroit du fichier où se trouve l' eleve
	fwrite(&seleve,sizeof(seleve),1,fichier_eleve);
	//on écrit le client dans le fichier, par dessus
	fclose(fichier_eleve);//fermeture du fichier
getch();


}


Le bleme c'est ke ça passe pas et je sais ke y a des soucis mais je vois pas ou.

Qqn peut m'aider plizz?

(¯`·.¸¸.-> £udo <-.¸¸.·´¯)

7 réponses

blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
1 avril 2005 à 11:14
salut!

y'a pas de solution miracle:
il n'y a pas d'insertion,
il n'y a que de l'ajout en fin de fichier.
(enfin avec les librairies de base du C ansi, et à ma connaissance)
mais je connais 2 manières de faire:
A/
1 lire le fichier,
2 tout mettre en mémoire
3 modifier
4 réécrire en écrasant le fichier

B/
1 lire le fichier source en lecture
2 creer un fichier cible avec un nouveau nom
3 faire une boucle qui lit le fichier source
et ecrit dans la cible la fiche avec eventuellement
les modifications (qui n'ecrit pas si la fiche est supprimée)
4 fermer les fichiers
5 effacer le fichier source
6 renomer le fichier cible avec le nom du fichier source

la solution A est rapide à l'exécution, mais il faut pas
se planter avec l'allocation mémoire.

la solution B est lente à l'exécution
(en effet un disque dur est plus lent que la mémoire vive)
mais le traitement est plus fiable, moins de risque
de perte des données.

Je sais pas si ça peut te servir, mais les autre méthodes
si il y en a, doivent être hyper complexes et de toutes façon
pas aussi rapide.

cordialement
3