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 :

Ouverture de fichier


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut Ouverture de fichier
    bonjour
    voila je voudrais ecrire dans mon fichier mais la ou je place mon curseur
    c'est a dire que je dois enregistrer un fichier de cette maniere
    begin:vcalendar
    begin:vevent
    ...
    end:vevent
    begin:vevent
    ...
    end:vevent
    begin:vevent
    ...
    end:vevent
    end:vcalendar
    en fait c'est la premiere et la derniere ligne qui m'embete, j'ai pensé a le creer et marquer ces lignes directement dans le fichier ensuite placer mon curseur de fichier a la fin du fichier, remonter d'une ligne et enregistrer ensuite ce que rentre l'utilisateur
    mon probleme c'est que si j'ouvre le fichier en 'a' il ecrit automatiquement a la fin il ne prend pas en compte le curseur et si je l'ouvre en 'w' il détruit automatiquement le fichier préexistant donc comment faire?
    merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Normal, pour écrire n'importe où dans le fichier sans rien écraser il faut travailler avec un fichier temporaire. Tu lis en fait le fichier d'origine et tu écrit dans le fichier temporaire ce que tu lis jusqu'à trouver l'endroit où tu veux faire la modification. Cette modification tu la fait dans le fichier temporaire et une fois celle-ci faite, tu lis le reste ligne par ligne que tu écrit dans le fichier temporaire.

    Pour finir, tu ferme les deux fichier et tu renomme le fichier temporaire avec le nom du fichier d'origine.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    si n'ai bien compris tu copie un fichier dans un nouveau fichier, peux tu faire un peit exemple pour mieux que je voye la fonction, dans le fichier d'origine du coup je peux utiliser un fseek pour lire et copier la chaine dans l'autre fichier c'est bien ca?
    merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    mon probleme est aussi sur comment copier un fichier dans un autre et ouvrir le fichier d'origine en quoi car au debut je l'ouvre en écriture j'écris dedans je le referme et plus loin je l'ouvre en lecture pour pouvoir utiliser un fseek , peut etre faut il mieux l'ouvrir en ecriture et en lecture mais le fseek marche t il toujours?
    voici ce que j'ai fait:
    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
    60
    61
    62
    63
    64
    65
    66
    67
     
    /*on écrit dans le fichier d'origine la forme que l'on veut*/
    /*on l'ouvre avec gestion des erreurs*/
    memoori=fopen("calend.txt","a");
     if (memoori==NULL) {
           perror("erreur d'ouverture du fichier");
           exit(0);
       }
       /*on écrit la forme que l'on souhaite*/
       fprintf(memoori,"BEGIN:VCALENDAR\n");
       fprintf(memoori,"VERSION:1.0 PRODID :PalmDesktop Generated\n");
       fprintf(memoori,"END :VCALENDAR");
       fclose(memoori);
    /*ouverture du fichier d'origine en lecture pour récupérer les donner*/
    memoori=fopen("calend.txt","r");
     if (memoori==NULL) {
           perror("erreur d'ouverture du fichier");
           exit(0);
       }
    //création d'une chaine de caractere
     chaine1 = calloc(81,sizeof(char));
     if (chaine1== NULL)
          exit(0);
    //création d'une chaine de caractere
     chaine2 = calloc(81,sizeof(char));
     if (chaine2== NULL)
          exit(0);
    /*Positionnement du curseur au début du fichier*/
    fseek(memoori,1,SEEK_SET);
    /*on récupère la première ligne du fichier*/
    fgets(chaine1,80,memoori);
     /*on passe à la ligne d'ne dessous*/
     fseek(memoori,1,SEEK_CUR);
    /*on récupère la première ligne du fichier*/
    fgets(chaine2,80,memoori); 
    /*ouverture du fichier memo (fichier temporaire en écriture */
       memo= fopen("memotemp.txt","a");
       if (memo==NULL) {
           perror("erreur d'ouverture du fichier");
           exit(0);
       }
     
    fprintf(memo,"%s",chaine1);
    fprintf(memo,"%s",chaine2);   
    fprintf(memo,"BEGIN:VEVENT\n"); 
    fprintf(memo,"SUMMARY:");  
    fprintf(memo,"%s\n",entrer);
    fprintf(memo,"DESCRIPTION:");
    fprintf(memo,"%s\n",buffer);
    fprintf(memo,"DTSTART:");
    fprintf(memo,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbred,minutesd);
    fprintf(memo,"DTEND:");
    fprintf(memo,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbref,minutesf);
    fprintf(memo,"RRULE:");
    fprintf(memo,"%s",tab3);
    fprintf(memo," ");
    fprintf(memo,"%s",tab4);
    fprintf(memo," ");
    fprintf(memo,"%s%s%s\n",anneef,tab2,jourf);
    fprintf(memo,"END:VEVENT\n"); 
    /*tant que la fin du fichier n'est pas terminé*/
        while(!feof(memo))
         {
         strcpy(memoori,memo);
         }
    fclose(memo);
    fclose(memoori);
    bien evidemment le strcpy va pas car il se fait qu'avec des chaines mais que dois je mettre a la place? et est ce que la structure va bien, faut -il faire comme ca?
    merci

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Exemple:
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
     
    #define BEGIN     "begin:vcalendar"
    #define END       "end:vcalendar"
    #define TMP_FILE  "tmp_calend.txt"
    #define BUF_SIZE  50
     
     
    int main (void)
    {
       FILE *   p_src    = NULL;
       FILE *   p_dest   = NULL;
       char     buffer   [BUF_SIZE];
     
     
       p_src = fopen ("calend.txt", "r");
     
       if (p_src == NULL)
       {
          fprintf (stderr, "Impossible d'ouvrir le fichier \"calend.txt\"\n");
          exit (EXIT_FAILURE);
       }
     
       p_dest = fopen (TMP_FILE, "w");
     
       if (p_src == NULL)
       {
          fprintf (stderr, "Impossible d'ouvrir le fichier \"%s\"\n", TMP_FILE);
          exit (EXIT_FAILURE);
       }
     
     
       while ((fgets (buffer, BUF_SIZE, p_src)) != NULL)
       {
          /* On supprime le saut de ligne et on met un zero de fin. */
          {
             char * p = strchr (buffer, '\n');
     
             if (p != NULL)
             {
                *p = 0;
             }
          }
     
          if (strcmp (buffer, BEGIN) == 0)
          {
             fprintf (p_dest, "%s\n", buffer);
             fprintf (p_dest, "begin:vevent\n");
             fprintf (p_dest, "event\n");
             fprintf (p_dest, "end:vevent\n");
          }
          else
          {
             fprintf (p_dest, "%s\n", buffer);
          }
       }
     
     
       fclose (p_src);
       fclose (p_dest);
     
       remove ("calend.txt");
       rename (TMP_FILE, "calend.txt");
     
     
       return EXIT_SUCCESS;
    }
    Fichier "calend.txt" de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    begin:vcalendar
    end:vcalendar
    Fichier "calend.txt" d'arrivée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin:vcalendar
    begin:vevent
    event
    end:vevent
    end:vcalendar
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Par défaut
    Désolé pepsister, je vais également m'en servir. Je pense que la question qui va suivre, t'intéressera également

    Si on utilise ceci, l'écriture se fait juste après la ligne BEGIN :VCALENDAR. Comment faire pour que l'écriture se fasse juste avant END :VCALENDAR ?

    Ca conserve bien tous les éléments déjà présent dans le fichier texte mais ça décale deux lignes qui doivent rester tout en haut :

    VERSION :1.0
    PRODID : PalmDesktop Generated j'ai rajouté un espace après les deux points sur cette ligne ci mais il n'existe pas en réalité, c'est pour éviter un smiley
    Je cherche de mon côté mais si tu as une solution rapide

    EDIT : je viens de trouver une idée, remettre un test avec un compteur pour ces deux premières lignes.

Discussions similaires

  1. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  2. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 16h47
  3. Ouverture de fichier
    Par Ricou.13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2003, 08h59
  4. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

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