Programmation c

malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   -  
malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je cherche un ptit programme c, ou bien une aide,
j'arrive pas à ecrire au debut d'un fichier sans effacer la suite de son contenu !!!!
Ce que je veux c'est ecrire au debut d'un fichier (on va dire que c'est un fichier .txt pour simplifier) sans effacer la suite du contenu
Merci des le depart pour votre aide

5 réponses

  1. francis
     
    Salut,

    Tu crée un fichier temporaire, tu écrit ce que tu veux, après t'écris tout ce qu'il y a dans ton fichier de base, tu le supprimer, et tu renomme le temporaire.
    1
    1. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      Merci ça parait à mon avis la seule solution existe,
      voilà j'ai fait ce petite bout de code à la volé et le probleme est que à chaque fois la valeur de la chaine de caractere pointe vers NULL et je reçois rien ensorti à part la valeur NULL dans le fichier temporaire
      Voici le code:
      #include <stdlib.h>
      #include <stdio.h>
      FILE* fopen(const char* nomDuFichier, const char* modeOuverture);
      int main(int argc, char *argv[])
      {
      FILE* fichier = NULL;
      FILE* fichier_malik = NULL;
      char * ch;
      //char * ch1;
      int a;

      fichier = fopen("test.txt", "r+");
      fichier_malik = fopen("test_malik.txt", "r+");

      if (fichier != NULL)
      {
      //printf("ouverture reussie\n");
      //a = fseek (fichier, 0, 0);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA\n" , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);
      fputs( "LATARSA " , fichier);

      while (!feof(fichier))
      {
      fscanf (fichier, "%s\n", ch);
      printf("voici la chaine lue: %s\n", ch);
      fprintf(fichier_malik, "%s\n", ch);

      }

      }
      else
      {
      printf("Impossible d'ouvrir le fichier test.txt\n");
      }

      return 0;
      }
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Alors, mieux vaut ouvrir fichier_malik en mode "w", tu ne va rien lire dedans.
      ensuite, ça n'a pas de sens. si "fichier" est ton nouveau fichier (tu commences par écrire dedans), il ne faut pas aller lire dedans et écrire dans l'autre, mais l'inverse.
      nomme tes variables de manière plus explicite, tu verras ça facilite le travail. Tes fichiers et variables FILE, nomme les source et destination (ou log et nouveau_log)
      Pour finir, tu n'alloues pas d'espace à "ch", il risque d'y avoir une erreur lors de l'exécution.
      0
    3. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      merci pour ces conseils c'est pratique et c'est vrai,
      pour l'allocation de l'espace a ch t'as parfaitement raison je l'avais constaté par la suite
      voici le nouveau code (qui ne marche toujour pas):
      #include <stdlib.h>
      #include <stdio.h>
      FILE* fopen(const char* nomDuFichier, const char* modeOuverture);
      int main(int argc, char *argv[])
      {
      FILE* fichier = NULL;
      FILE* fichier_temp = NULL;
      char * ch;
      char * ch1;
      int a, condition = 1;

      ch = (char *) malloc(25);
      fichier = fopen("test.txt", "r+");
      fichier_temp = fopen("test_temp.txt", "w");
      if (fichier != NULL)
      {
      //printf("ouverture reussie\n");
      //a = fseek (fichier, 0, 0);
      fputs( "Les systemes dinformation actuels mettent en relation un nombre\n Poesi \n Les systemes dinformation actuels mettent en relation un nombre\n Poesi\n Les systemes dinformation actuels mettent en relation un nombre\n" , fichier);

      while (!feof(fichier))
      {
      condition = fscanf (fichier, "%s", ch);
      if(condition!=feof(fichier))
      {
      printf("voici la chaine lue: %s\n", ch);
      fprintf(fichier_temp, "%s", ch);
      }


      }

      }
      else
      {
      printf("Impossible d'ouvrir le fichier test.txt\n");
      }

      return 0;
      }
      0
    4. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      j'ai pas compris ça : ensuite, ça n'a pas de sens. si "fichier" est ton nouveau fichier (tu commences par écrire dedans), il ne faut pas aller lire dedans et écrire dans l'autre, mais l'inverse.
      0
    5. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      si je fais l'inverse comme tu dis ( lire dans fichier_temp dans le 2eme code) ça ne rien donné puisque ce fichier est vide
      0
  2. tartefion Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   7
     
    Bonjour,

    Ou sinon tu stock l'intégralité de ton texte dans une variable à laquelle tu ajoutes ce que tu veux :

    string contenuFichier; //Ton contenu à la base
    string new_contenu = "Blablablabla" + contenuFichier; //Le nouveau contenu
    1
  3. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
     
    Merci pour vos réponse,
    j'ai plutot pensé à faire la premiere solution (celle de francis), parce que la dexieme je ne sais pas si ça va trop marché parce que mon script va tourner et le fichier va devenir volumineux, donc l'accés au fichier va prendre du temps et et mettre son contunu dans une variable risque de déborder (la variable).
    voilà,
    par contre, je voulais penser à une solution ou je fais le traitement sur le fichier de base directement.
    0
    1. tartefion Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   7
       
      De rien ^^ je te donnais cette solution afin d'éviter la création d'un nouveau fichier.
      A+
      0
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    on ne peut pas écrire au début d'un fichier sans effacer ce sur quoi on écrit.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nabil07 Messages postés 161 Statut Membre 64
     
    Bonjour,

    il suffit d'ouvrir le fichier en mode "append" [a].
    FILE* fichier = fopen("nom_fichier","a+");
    seek(fichier,0); //le 0 est le nombre d'octets que tu veux sauter. Puisque tu veux que ca sera au début donc tu mets 0
    0
    1. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      mais avec la fonction [a] les ajouts se font a la fin et moi je veux au debut sans ecraser la suite
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      non, dans ce mode là tu peu écrire à la fin, mais pas au début.
      0
    3. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      oui moi je voulais au début, je l'ai bien precisé dans l'annonce du probleme
      0
    4. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      deja que je n'arrive pas a lire mon fichier ligne par ligne
      t'as pas une idée
      0