Programation en C (basique)

Programation en C (basique) - C - Programmation

Marsh Posté le 15-06-2007 à 22:11:44    

Bonjour a tous,  
J'aimerai ecrire un programme pour ajouter une donnée dans un fichier nommé affiche.txt  
je suis très très mauvais en code et j'aimerai que vous m'aidiez merci.  
Voila ce que j'ai tapé mais ca marche pas  
Le fichier "affiche.txt" ne s'incrémente pas  
 
void mon_ecrireDVD(BASE* elt, FILE* fic)  
{  
fprintf (fic,"annee=%d\n",elt->annee);  
fprintf (fic,"titre=%s\n",elt->titre);  
fprintf (fic,"realisateur=%s\n",elt->realisateur);  
fprintf (fic,"acteurs=%s\n",elt->acteurs);  
fprintf (fic,"genre=%s\n",elt->genre);  
fprintf (fic,"duree=%d\n",elt->duree);  
fprintf (fic,"numero=%d\n",elt->numero);  
fprintf (fic,"\n\n\n" );  
}
 
Si je ferme le logiciel et que je reprends il n'inscrit rien dans le fichier "affiche.txt" il garde juste en mémoire.

Reply

Marsh Posté le 15-06-2007 à 22:11:44   

Reply

Marsh Posté le 15-06-2007 à 22:12:39    

par contre avant que je ne ferme le logiciel si je regarde ce qui est dans la base ca marche.

Reply

Marsh Posté le 15-06-2007 à 22:16:59    

goldorak2600+ a écrit :

Bonjour a tous,  
J'aimerai ecrire un programme pour ajouter une donnée dans un fichier nommé affiche.txt  
je suis très très mauvais en code et j'aimerai que vous m'aidiez merci.  
Voila ce que j'ai tapé mais ca marche pas  
Le fichier "affiche.txt" ne s'incrémente pas  
 
void mon_ecrireDVD(BASE* elt, FILE* fic)  
{  
fprintf (fic,"annee=%d\n",elt->annee);  
fprintf (fic,"titre=%s\n",elt->titre);  
fprintf (fic,"realisateur=%s\n",elt->realisateur);  
fprintf (fic,"acteurs=%s\n",elt->acteurs);  
fprintf (fic,"genre=%s\n",elt->genre);  
fprintf (fic,"duree=%d\n",elt->duree);  
fprintf (fic,"numero=%d\n",elt->numero);  
fprintf (fic,"\n\n\n" );  
}
 
Si je ferme le logiciel et que je reprends il n'inscrit rien dans le fichier "affiche.txt" il garde juste en mémoire.


 
T'as bien ouvert ton fichier en mode "w", "w+", "r+", "a" ou "a+" ??? Sinon je ne vois pas.
 
Ps: tu peux remplacer le dernier "fprintf()" par fputs("\n\n\n", fic)   => Plus rapide à l'exécution
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 15-06-2007 à 22:18:35    

c'est quoi la commande pour ouvrir le fichier en mode "w" etc...
je comprends rien a la programmation, maintenant je la met où cette ligne de commande?

Reply

Marsh Posté le 15-06-2007 à 22:18:56    

et elle ressemble a quoi?

Reply

Marsh Posté le 16-06-2007 à 08:36:46    

goldorak2600+ a écrit :

c'est quoi la commande pour ouvrir le fichier en mode "w" etc...
je comprends rien a la programmation, maintenant je la met où cette ligne de commande?


 
Le traitement des fichiers en C se fait de la façon suivante
1) tu dois ouvrir ton fichier avec fopen(). Ca te renvoie un pointeur de type "FILE *" que tu stockes dans une variable de même type. Le mode d'ouverture dépend de ton besoin et peut être pris parmis les suivants

  • lire le fichier => r
  • lire le fichier et y écrire => r+
  • écrire le fichier en le réinitialisant s'il n'est pas vide => w
  • écrire le fichier en le réinitialisant s'il n'est pas vide et le lire => w+
  • se placer à la fin du fichier pour continuer à y écrire => a
  • se placer à la fin du fichier pour continuer à y écrire et pouvoir aussi le lire => a+


Si le fichier est de type "binaire" (son, image, vidéo, ... tout ce qui n'est pas du texte) il faut rajouter au mode choisi la lettre "b" (pas obligatoire sur Unix)
 
Si jamais l'ouverture ne se fait pas pour une raison quelconque, la fonction fopen() renvoie "NULL", la variable globale "errno" contient la cause de l'erreur et la fonction "strerror()" renvoie le texte correspondant à errno ce qui peut être utile
 
Exemple:


FILE *fp;
fp=fopen("c:\autoexec.bat", "r" );
if (fp == NULL)
{
    printf("Erreur d'ouverture autoexec.bat pour la raison %s\n", strerror(errno))  
    => suite à donner à l'erreur => souvent arrêt du programme ou de la fonction puisque le fichier n'a pas été ouvert
}


 
2) Une fois que le fichier a été ouvert dans le mode qu'il te faut, tu as un ensemble de fonctions (fgetc, fputc, fgets, fputs, fread, fwrite, fscanf, fprintf) qui te permettent de lire et d'écrire dans le fichier que tu manipules par son pointeur
Tu as aussi des fonctions spéciales de manipulation (fseek, ftell, feof)
Et une fonction particulière fflush() qui te permet de finaliser les écritures en attentes (ce n'est pas parce que tu écrits un caractère que ce caractère est réellement écrit sur le disque => ce serait trop long => les caractères écrits sont stockés dans une mémoire particulière qui n'est écrite sur disque que quand elle est pleine ou que c'est demandé par fflush => optimisation des accès disques)
 
3) Une fois que t'as fini de travailler, tu dois fermer le fichier par fclose()
 
=> http://fr.lang.free.fr/cours/Langa [...] e_v2.0.pdf page 103 et suivantes


Message édité par Sve@r le 16-06-2007 à 08:37:14

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 16-06-2007 à 15:47:38    

tu peux aussi utiliser perror() pour avoir plus d'infos.
 
edit: j'avais pas vu que tu lui avait donné strerror() :)

Message cité 1 fois
Message édité par bjone le 16-06-2007 à 15:48:53
Reply

Marsh Posté le 16-06-2007 à 20:53:21    

bjone a écrit :

edit: j'avais pas vu que tu lui avait donné strerror() :)


Mouais... ouvrir les yeux, la paille de l'oeuil de ton frêre et la poutre de ton oeuil, toussa quoi  ;)  
 

bjone a écrit :

tu peux aussi utiliser perror() pour avoir plus d'infos.


Perso j'aime pas perror() qui t'envoie son truc formaté bien à lui sur stderr. Je préfère largement me faire mon truc à ma sauce (à base de "__FILE__" et "__LINE"__" ). Mais bien entendu chacun a ses propres préférences  :sol:


Message édité par Sve@r le 16-06-2007 à 20:53:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-06-2007 à 02:30:30    

oui tout à fait :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed