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 :

problème gestion de fichiers


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut problème gestion de fichiers
    Bonjour,
    svp aidezmoi pour bien comprendre la gestion de fichiers par le language C.

    probléme : je veux lire des données d'un fichier entree.dat et les ecrire dans un fichier sortie.dat

    le contenu du fichier "entree.dat"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a b c
    3 6 9
    x y z 
    2.3 4.6 5
    mon code que je souhaite que vous me le corriger :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    int  a,b,c;
    float x,y,z;
     FILE *f1, *f2;
    main()
    {
    f1=fopen("entree.dat","r");
    if (f1== NULL)
    {
        printf("Impossible d'ouvrire le fichier entree.dat");
    }
    f2=fopen("sortie.dat","w");
    fprintf(f2,"Confirmation des parametres:\n\n");
    fscanf(f1, "\n"); // pour sauter la premiere ligne du fichier entrée.dat
    fscanf(f1, "%i   %i   %i\n", &a, &b, &c); // lire la 2éme ligne contenant a,b,c
    fprintf(f2,"a,b,c =\n");
    fprintf(f2, "%i   %i   %i\n", a, b, c);
    fscanf(f1, "\n");
    fscanf(f1, "%f   %f   %f\n", &x, &y, &z);// lire la 4éme ligne contenant x,y,z
    fprintf(f2,"x,y,z =\n");
    fprintf(f2, "%f   %f   %f\n", x, y, z);
    // pour verifier
    printf("a =  %i\n", a);
    printf("b =  %i\n", b);
    printf("c =  %i\n", c);
    printf("x =  %i\n", x);
    printf("y =  %i\n", y);
    printf("z =  %i\n", z);
     
    fclose(f1);
    fclose(f2);
     
    }
    le resultat de l'execution par double click de mon fichier executable est le fichier "sortie.dat" suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Confirmation des parametres:
     
    a,b,c =
    0   0   0
    x,y,z =
    0.000000   0.000000   0.000000
    le resultat de l'execution de mon fichier executable depuis l'invite de commande me donne le message "Impossible d'ouvrire le fichier entree.dat".

    pouriez vous m'aider à corriger ce code ?
    merci d'avance.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Salut,

    Déjà, il faudrait corriger ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Compiling: main.c
    main.c:7: warning: return type defaults to `int'
    main.c:7: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:27: warning: int format, double arg (arg 2)
    main.c:28: warning: int format, double arg (arg 2)
    main.c:29: warning: int format, double arg (arg 2)
    main.c:34:2: warning: no newline at end of file
    main.c:34: warning: control reaches end of non-void function
    Ensuite, il est inutile ici d'utiliser des variables globales.
    Enfin, il faudrait indenter correctement le code pour rendre la lecture plus facile.

    Je continue à regarder ton code et voir si je peux aider.

    EDIT : la façon dont ton fichier d'entrée est formaté, ça n'est pas simple à lire. Ca t'est imposé ? Sinon, je te propose de séparer tes valeurs par des virgules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a,3
    b,6
    c,9
    x,2.3
    y,4.6
    z,5
    Essaie de lire les valeurs maintenant. Poste ton code, s'il reste des problèmes, on t'aidera à corriger.

    Deuxième remarque : tu testes bien l'ouverture de f1, mais si f1 vaut NULL, tu essaies tout de même de lire dedans... plantage assuré. Réorganises ton code . De plus, tu ne testes pas l'ouverture de f2.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    merci odsen de votre aide,

    le format des données dans le fichier entree est imposé comme ci-dessus.

    voici encore le code, dans le precedant j'ai oublié quélque truc:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    int  a,b,c;
    float x,y,z;
    FILE *f1, *f2;
    main()
    {
    f1=fopen("entree.dat","r");
    if (f1== NULL)
    {
        printf("Impossible d'ouvrire le fichier entree.dat");
        exit(1);
    }
    f2=fopen("sortie.dat","w");
    if (f2== NULL)
    {
        printf("Impossible d'ouvrire le fichier sortie.dat");
        exit(1);
    }
     
    fprintf(f2,"Confirmation des parametres:\n\n");
    fscanf(f1, "\n"); // pour sauter la premiere ligne du fichier entrée.dat
    fscanf(f1, "%i %i %i\n",&a, &b, &c); // lire la 2éme ligne contenant a,b,c
    fprintf(f2,"a,b,c =\n");
    fprintf(f2, "%i %i %i\n",a,b,c);
    fscanf(f1, "\n");
    fscanf(f1, "%f %f %f\n",&x, &y, &z);// lire la 4éme ligne contenant x,y,z
    fprintf(f2,"x,y,z =\n");
    fprintf(f2, "%f %f %f\n",x, y, z);
    // pour verifier
    printf("a =  %i\n", a);
    printf("b =  %i\n", b);
    printf("c =  %i\n", c);
    printf("x =  %i\n", x);
    printf("y =  %i\n", y);
    printf("z =  %i\n", z);
     
    fclose(f1);
    fclose(f2);
     
    }
    et ça compile tres bien dans code::blocks aucune erreur;
    mais l'execution de ce programe me donne le méme resultat ç-a-d rien toutes les variables sont nulles.

    merci de m'aider

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    J'analyse le code, je te réponds dans quelques minutes.

    EDIT :
    et ça compile tres bien dans code::blocks aucune erreur;
    Ca ne veut pas dire que le code est propre, tu n'as pas corrigé les avertissements. Voici ton code, je n'ai pas changé le principe de fonctionnement, et réorganisé l'ensemble pour que ça soit propre :
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #include <stdio.h>
    #include <stdlib.h>
     
    /* il vaut mieux definir les noms des fichiers avec les directives
       de preprocesseur pour plus de clarte dans le code */
     
    #define F_IN "entree.dat"
    #define F_OUT "sortie.dat"
     
    #define NB_ENTIERS 3
    #define NB_FLOTTANTS 3
     
    /* il faut declarer explicitement que main retourne un int */
     
    int main(void)
    {
       /* il serait peut etre plus pratique d'utiliser des tableaux */
     
       int n[NB_ENTIERS] = {0};
       float f[NB_FLOTTANTS] = {0.0};
     
       /* plutot que 1 et 2, choisis in et out, on comprend alors
          que un des deux fichiers sera lu, l'autre cree */
     
       FILE *fp_in = NULL;
       FILE *fp_out = NULL;
     
       fp_in = fopen(F_IN,"r");
     
       /* evitons les sorties multiples de programme */
     
       if (fp_in != NULL)
       {
          fp_out = fopen(F_OUT,"w");
     
          if(fp_out != NULL)
          {
             int c;
     
             /* saut de la premiere ligne */
     
             while((c = fgetc(fp_in)) != '\n');
     
             /* je reprend ta methode avec fscanf, mais il vaudrait mieux
                trouver une solution avec fgets, lecture et conversion */
     
             fscanf(fp_in, "%d %d %d",&n[0], &n[1], &n[2]);
     
             while((c = fgetc(fp_in)) != '\n');
     
             fscanf(fp_in, "%f %f %f",&f[0], &f[1], &f[2]);
     
             /* ecriture formatee dans le fichier de sortie */
     
             fprintf(fp_out, "a b c\n");
             fprintf(fp_out, "%d %d %d\n", n[0], n[1], n[2]);
             fprintf(fp_out, "x y z\n");
             fprintf(fp_out, "%f %f %f\n", f[0], f[1], f[2]);
     
             fclose(fp_out), fp_out = NULL;
     
          }
     
          else
          {
             printf("Impossible d'ouvrir le fichier %s\n", F_OUT);
          }
     
          fclose(fp_in), fp_in = NULL;
     
       }
     
       else
       {
          printf("Impossible d'ouvrir le fichier %s\n", F_IN);
       }
     
       /* main retourne un int : 0 signifie aucune erreur */
     
       return 0;
    }
    Il semble que ça soit fscanf qui n'arrive pas à lire les flottants.
    Il vaudrait mieux lire les lignes dans un tableau de caractères avec fgets, puis convertir chaque nombre.

    Ton but, est, je le suppose, d'arriver à lire cette entrée formattée, et non pas d'effectuer une simple copie entrée vers sortie ? Car dans ce dernier cas, il suffirait de copier les caractères un à un dans le fichier de sortie.

    Essaie donc de lire les lignes avec fgets, puis d'analyser chaque ligne pour enregistrer dans des variables chaque nombre. On t'aidera s'il reste des problèmes.

  5. #5
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Un tuto qu'il est toujours intéressant de lire :
    http://xrenault.developpez.com/tutoriels/c/scanf/
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par azez
    fscanf(f1, "\n"); // pour sauter la premiere ligne du fichier entrée.dat
    ne permet pas de sauter une ligne, ici tu cherches a lire \n, ce qui n'est pas le caractere courant. Il y a ensuite un decalage dans toute l'analyse du fichier.

    Tu devrais:
    * verifier les codes retours des fonctions (entre autres fscanf afin de savoir si les lectures fonctionnent bien)
    * utiliser fgets pour lire des lignes dans le fichier, et ensuite utiliser sscanf pour parser la ligne.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    un grand merci à odsen qui m'a beaucoup aidé et à zooro aussi,
    mon erreur etait dans le saut de la première ligne du fichier entrée.dat
    je fesait fscanf(f1, "\n"); et c'est une erreur, la solution est d'utiliser une fonction qui avance le curseur d'un nombre correspendant au nombre de caractères de la première ligne c-à-d sauter la première ligne et lire depuis la deuxième soit: fseek(f1, 6, SEEK_SET);

    et voilà le code qui marche à merveille:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    int  a,b,c;
    float x,y,z;
    FILE *f1, *f2;
    int main()
    {
    f1=fopen("entree.dat","r");
    if (f1== NULL)
    {
        printf("Impossible d'ouvrire le fichier entree.dat");
        exit(1);
    }
    f2=fopen("sortie.dat","w");
    if (f2== NULL)
    {
        printf("Impossible d'ouvrire le fichier sortie.dat");
        exit(1);
    }
     
    fprintf(f2,"Confirmation des parametres:\n\n");
    //fscanf(f1, "\n"); // c'est faux ,pour sauter la premiere ligne du fichier entrée.dat
    fseek(f1, 6, SEEK_SET);//c'est juste, pour sauter la premiere ligne du fichier 
    fscanf(f1, "%i %i %i\n",&a, &b, &c); // lire la 2éme ligne contenant a,b,c
    fprintf(f2,"a,b,c =\n");
    fprintf(f2, "%i %i %i\n",a,b,c);
    //fscanf(f1, "\n"); c'est faux
    fseek(f1, 7, SEEK_CUR);// encore sauter un ligne depuis la position courante du curseur
    fscanf(f1, "%f %f %f\n",&x, &y, &z);// lire la 4éme ligne contenant x,y,z
    fprintf(f2,"x,y,z =\n");
    fprintf(f2, "%f %f %f\n",x, y, z);
    // pour verifier
    printf("a =  %i\n", a);
    printf("b =  %i\n", b);
    printf("c =  %i\n", c);
    printf("x =  %f\n", x);
    printf("y =  %f\n", y);
    printf("z =  %f\n", z);
     
    fclose(f1);
    fclose(f2);
    return 0;
    }
    derniere question : est ce qu'il y'a une autre methode de sauter une ligne d'un fichier et lire la ligne suivante et qui contient fscanf ?

    merci encore.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par azez
    et voilà le code qui marche à merveille:
    Je me demande pourquoi, alors que certains font l'effort de te montrer du code correct et bien écrit, tu t'obstines à coder comme un goret.
    • Pas d'intendation.
    • Pas de fermeture des fichiers ouverts en cas d'erreur...
    • Usage de fscanf() sans contrôle du code retour
    • Codage 'en dur' valable pour un seul fichier...

    derniere question : est ce qu'il y'a une autre methode de sauter une ligne d'un fichier et lire la ligne suivante et qui contient fscanf ?
    On t'a déjà indiqué pour pour lire un fichier texte, on utilisait fgets() qui lit les lignes unes à unes (si la place est suffisante). Il ne faut pas utiliser fscanf() si on est pas un expert. Trop complexe.

    Si tu ne tiens pas compte des conseils donnés, à quoi bon demander de l'aide ?
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    merci Emmanuel de tes conseils le problème et que j'ai d'autre contraintes de codage que vous ne connaissez pas.

    ex :-je ne peut pas utiliser un tableu comme à fait Odsen.
    -les variables doivent étre déclarées globales ...etc

    et merci de suggérer fgets c'est vraiment ce que je voulais , je l'ai pas vu dans le code de odsen , et pour dire la vérité je suis trés débutant .

    merci à tous .

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par azez
    merci Emmanuel de tes conseils le problème et que j'ai d'autre contraintes de codage que vous ne connaissez pas.

    ex :-je ne peut pas utiliser un tableu comme à fait Odsen.
    -les variables doivent étre déclarées globales ...etc
    Horrible. Change d'école.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Horrible. Change d'école.
    ecoute monsieur l'expert Emmanuel si tu es un expert moi je n'est pas honte de dire que c'est mes premiéres lignes en language c; si tu postes pour faire du màle aux autres vaut mieux pas poster du tout.
    merci.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par azez
    si tu postes pour faire du màle aux autres vaut mieux pas poster du tout.
    Au contraire. Je veux te mettre en garde contre les charlatans qui croient connaitre le langage C et qui t'imposent de mettre des globales. Sauf contraintes particulières, hors de la portée d'un débutant, il n'y a aucune raison de mettre des globales ici.

    Tu fais ce que tu veux, mais si tu veux apprendre le C correctement, tu ferais mieux de ne pas continuer dans cette voie.

    Si tu veux bricoler, OK, mais pas ici. C'est un site professionnel.

    Je ne suis pas d'accord avec tout le contenu, mais cette 'ligne' est tout à fait correcte.
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    ok , mais je crois qu'il y'a une petite place pour les debutants malgré que c'est un site pro, non?

    et je dois utiliser des globales car ces variables ainsi que d'autres vont etre utiliser dans plusieures fonctions dans mon programme.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par azez
    ok , mais je crois qu'il y'a une petite place pour les debutants malgré que c'est un site pro, non?
    Débutants oui, bricoleurs non.
    et je dois utiliser des globales car ces variables ainsi que d'autres vont etre utiliser dans plusieures fonctions dans mon programme.
    Et alors ? Ton prof ne connait pas les fonctions avec paramètres ? Les structures ? Les cas où les globales sont indispensables sont extrêmement rares. Ce que tu cites n'en fait absolument pas partie.
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Les cas où les globales sont indispensables sont extrêmement rares. Ce que tu cites n'en fait absolument pas partie.
    +1
    Reprendre un projet utilisant des globales à tord et à travers, c'est merveilleux
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème gestion de fichier
    Par Jb_One73 dans le forum Général Java
    Réponses: 2
    Dernier message: 17/02/2015, 07h58
  2. Problème de fonction et gestion de fichier texte
    Par eric41 dans le forum VBScript
    Réponses: 3
    Dernier message: 17/02/2013, 12h18
  3. Problème avec la gestion des fichier dans une JList()
    Par chebmo1986 dans le forum Composants
    Réponses: 3
    Dernier message: 18/02/2009, 23h49
  4. Problème Gestion Liste et fichiers txt
    Par Freud44 dans le forum Général Java
    Réponses: 2
    Dernier message: 26/08/2008, 21h10
  5. Problème de gestion des fichiers
    Par leserapheen dans le forum Débuter
    Réponses: 10
    Dernier message: 30/04/2008, 18h39

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