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 :

copier le contenu d'un fichier avec fgets


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Par défaut copier le contenu d'un fichier avec fgets
    slt a tous.
    voila mon problème je veux copier le contenu d'un fichier dans un char **temp,
    avec la fonction fgets je copie tout le contenu du fichier dans char *buffer ça marche bien.
    maintenant je veux copier le contenu de char *buffer dans char **temps et ca marche toujours pas
    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
    #include <stdio.h>
    #include <string.h>
    #define TAILLE_MAX 1024
     
     
    void copyfiletobuffer ( char *file, char *buffer)
    {
    	FILE *file_open;
     
    		file_open = fopen (file, "r");
     
    		if (file_open != NULL )
    		{
    			while (fgets (buffer, TAILLE_MAX, file_open) != NULL)
    			{
     
    				//printf ("%s\n", buffer);
     
    			}
    					   fclose (file_open);
    		}
    		else
    			printf ("\n erreur lors de l'ouverture du fichier \n");
     
    }
     
    void copybuffertotemp (char *buffer, char temp[TAILLE_MAX][TAILLE_MAX])
    {
     
    	int i = 0;
    	int u = 0;
    	int j = 0;
     
    	while ( buffer[i] != '\0')
    	{
    		while (buffer[i] != '\n')
    		{
    			temp[u][j] = buffer[i];
    			i++;
    			u++;
    		}
    			temp[u][j] = '\0' ;
    			i++;
    			j++;
    	}
    		temp[u][j] = '\0' ;
     
    	for (u=0; u<TAILLE_MAX; u++)
    		 printf ("%s\n", temp);
     
    }
     
    int main (int ac, char **av)
    {
    	char buffer[TAILLE_MAX];
    	char temp[TAILLE_MAX][TAILLE_MAX];
    	copyfiletobuffer(av[1], buffer); 
    	copybuffertotemp (buffer, temp);
     
    	return 0;
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Il y a un premier problème dans ton programme : chaque ligne lue depuis le fichier, est stockée dans buffer, si bien qu'au final, ne reste dans buffer que la dernière ligne du fichier lue.

    Solution 1 : Travailler directement avec un tableau de tableau :
    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
    void copyfiletobuffer ( char *file, char buffer[TAILLE_MAX][TAILLE_MAX])
    {
        int i = 0;
        FILE *file_open;
        file_open = fopen (file, "r");
     
        if (file_open != NULL )
        {
            while((i < TAILLE_MAX) && 
                    (fgets ((char*)buffer[i], TAILLE_MAX, file_open) != NULL))
            {
                ;
            }
            fclose (file_open);
        }
        else
            printf ("\n erreur lors de l'ouverture du fichier \n");
    }
    Solution 2 : Décaler buffer à chaque lecture du nombre d'octets lus.
    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
    void copyfiletobuffer ( char *file, char buffer[TAILLE_MAX])
    {
        int i = 0;
        FILE *file_open;
        file_open = fopen (file, "r");
     
        if (file_open != NULL )
        {
            while(fgets (buffer + i, TAILLE_MAX - i, file_open) != NULL)
            {
                i += strlen(buffer + i);
            }
            fclose (file_open);
        }
        else
            printf ("\n erreur lors de l'ouverture du fichier \n");
    }

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/02/2015, 02h27
  2. Réponses: 0
    Dernier message: 14/06/2013, 08h33
  3. Réponses: 5
    Dernier message: 12/03/2009, 17h06
  4. copier le contenu d'un fichier dans un autre avec séparateur
    Par sws2008 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 03/12/2008, 09h56
  5. extraire le contenu d'un fichier avec perl
    Par titexe dans le forum Langage
    Réponses: 1
    Dernier message: 28/11/2006, 15h21

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