IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

ecriture en debut de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut ecriture en debut de fichier
    Bonjour,
    Je cherche une solution pour écrire une chaine (par exemple "Bonjour" tout simplement) en début d'un fichier texte. J'ai essayé l'ouverture en mode write qui bien sur m'écrase tout le fichier. J'ai essayé d'autres combinaisons sans succes.

    Pour le moment la seule solution que je vois est le passage par un fichier temporaire avec d'abord écriture de ma chaine et ensuite copie du contenu du fichier.

    A tout hasard existe - t - il un moyen plus rapide?

    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par john123
    A tout hasard existe - t - il un moyen plus rapide?
    Non, pas en C à mon avis.

    Jc

  3. #3
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    le code suivant écrira au tout début du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main (void)
    {
    	FILE *f;
     
    	f = fopen("coucou.txt", "rb+"); 
    	fseek(f, 0L, SEEK_SET); 
    	fputs("salut", f); 
    	fclose(f);
     
    	return 0;   
    }
    Seulement, il écrasera les données déja présentes. Il n'existe pas de fonction "insert" pour les systèmes de fichiers standards géré par fopen.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    le code suivant ajoutera une chaîne "chaîne" au début d'un fichier...
    (SI LE FICHIER N'EST PAS TROP GROS....)

    (sur *n*x. <sys/stat.h> existe au moins pour cygwin et CodeBlock sous Windows....)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/stat.h>
     
     
    int main (void)
    {
         FILE *f=NULL;
         char  *Text=NULL ;
         struct stat  buf ;
         size_t   n = 0 ;
         char     *chaine = "BONJOUR\n" ;
     
     
         f = fopen("coucou.txt", "r"); 
         if ( f != NULL )
           {
               fstat ( fileno(f), &buf );
               if ( buf.st_size > 0 )
                 {
                     Text = malloc ( buf.st_size );
                      if ( Text != NULL )
                        {
                            n = fread ( (void *)Text, 1, buf.st_size, f ); 
                            if ( n != buf.st_size )
                                fprintf ( stderr, "\nN'ai pas pu lire tout le fichier !!!\n");
                        }
                      else
                          fprintf ( stderr, "\nErreur d'allocation mémoire !!!\n");
                 }
               else
                    fprintf ( stderr, "\nFichier vide !!!\n");
               fclose ( f);
            }
          else
              fprintf ( stderr, "\n Fichier non trouvé ...\n");
     
         if ( n > 0 )
           {
              f = fopen("coucou.txt", "w"); 
              if ( f != NULL )
                {
                    fprintf ( f, "%s", chaine );
                    fwrite ( (void *) Text, 1, buf.st_size, f );
     
                    fclose(f);
     
                    fprintf ( stderr, "\nREECRITURE OK !!!\n");
                }
           }
          else
               fprintf ( stderr, "\nQuelque chose s'est mal passé !!!\n");
     
         if ( Text != NULL )
            free(Text);
     
         return EXIT_SUCCESS;   
    }

  5. #5
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Pour le moment la seule solution que je vois est le passage par un fichier temporaire avec d'abord écriture de ma chaine et ensuite copie du contenu du fichier.
    Personnellement, c'est ce que j'ai l'habitude de faire. Quand tu demandes un moyen "plus rapide", c'est "plus rapide" dans le sens "de meilleures performances" ou "plus rapide à coder" ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et j'ajouterais que si jamais tu es sous *n*x ou sous cygwin tu as la commande "cat" ....

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par john123
    Pour le moment la seule solution que je vois est le passage par un fichier temporaire avec d'abord écriture de ma chaine et ensuite copie du contenu du fichier.

    A tout hasard existe - t - il un moyen plus rapide?
    Non. C'est vraiment lent ? Tu as fait des mesures dans des conditions définies et reproductibles ?

Discussions similaires

  1. [debutant]streamwriter et ecriture debut de fichier !
    Par ChristopheOce dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 27/01/2006, 11h08
  2. Réponses: 18
    Dernier message: 08/08/2005, 20h52
  3. [DEBUTANT]Le fichier spécifié est introuvable
    Par Battosaiii dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/04/2005, 16h36
  4. Ecriture et lecture de fichiers
    Par nozvad dans le forum Général Python
    Réponses: 4
    Dernier message: 12/10/2004, 16h47
  5. [langage] Ajout en debut de fichier
    Par WetzlarMan dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2004, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo