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 :

Import fichier plat FTP [Débutant]


Sujet :

C#

  1. #1
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut Import fichier plat FTP
    Bonjour,

    je me remets au C#, j'essaie de faire qqc de simple pour tester l'import d'un fichier de mon local sur un FTP perso.

    Le FTP perso fonctionne très bien, aucun soucis de ce coté là.
    Par contre, quand j'exécute ce bout de code, il me dit sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stream requestStream = request.GetRequestStream();
    L'URI demandée n'est pas valide pour cette commande FTP.

    Quelqu'un pourrait il m'éclairer ?

    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
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
     
    namespace Examples.System.Net
    {
        public class WebRequestGetExample
        {
            public static void Main()
            {
     
                // Get the object used to communicate with the server.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://***.***.**.*");
                request.Method = WebRequestMethods.Ftp.UploadFile;
     
                // This example assumes the FTP site uses anonymous logon.
                request.Credentials = new NetworkCredential("****", "*****");
     
                // Copy the contents of the file to the request stream.
                StreamReader sourceStream = new StreamReader("C:\\test.txt");
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;
     
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();
     
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
     
                Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
     
                response.Close();
            }
        }
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il n'y a pas plus de détails dans l'exception ? InnerException par exemple ?

    Et as-tu essayé avec WebClient ? C'est nettement plus simple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (WebClient wc = new WebClient())
    {
        wc.UploadFile("ftp://***.***.***.***/chemin/du/fichier.txt", @"C:\test.txt");
    }

  3. #3
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    je veux bien, mais ou est ce que je passe mes id de connexion avec cette méthode ?

    le but le voila, fournir a plein de client l'outil qui permettra d'envoyer et recevoir des fichier d'un dossier sur un FTP commun (avec un sous-dossier personnel par client)
    l'arborescence ressemblerai a ca:

    ftp//100.100.10.1
    --/Dossier clients
    ------/M_Dupond
    ------/M_Jean
    --/Autre dossiers

    chaque utilisateur aura un fichier .conf ac son projet avec des paramètres de connexion spécifique (id, mdp, URL etc).
    Les données qui sont dans ce fichier .conf seront passées en paramètre des méthodes du projet principal.
    Bref, ça c'est pour l'utilisation générale.

    Le module que je souhaite faire dans un premier temps, c'est le dépot d'un fichier sur le FTP dans le répertoire /Test.

    Donc ta méthode est bien, mais je ne peux pas définir d'identifiant de connexion, ni mdp.

  4. #4
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    Voici mon projet,
    j'ai trouvé ça sur internet, mais je reste toujours bloqué avec la même erreur

    dans une classe "FTP":
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Net;
     
    namespace Module_FTP
    {
        public class FTP
        {
            public string Server { get; set; }
            public string Username { get; set; }
            public string Password { get; set; }
     
            public void Upload(string filePath, string inputFilePath)
            {
                Uri serverUri = new Uri("ftp://" + this.Server + "/" + filePath);
                if (serverUri.Scheme != Uri.UriSchemeFtp)
                { return; }
     
                FtpWebRequest myRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
                myRequest.Credentials = new NetworkCredential(this.Username, this.Password);
                myRequest.Method = WebRequestMethods.Ftp.UploadFile;
     
                FileStream stream = File.OpenRead(inputFilePath);
                byte[] buffer = new byte[stream.Length];
     
                stream.Read(buffer, 0, buffer.Length);
                stream.Close();
     
                Stream reqStream = myRequest.GetRequestStream();
                reqStream.Write(buffer, 0, buffer.Length);
                reqStream.Close();
     
            }
            public void Download(string directory, string file)
            {
                Uri serverUri = new Uri("ftp://" + this.Server + "/" + directory + "/" + file);
                if (serverUri.Scheme != Uri.UriSchemeFtp)
                { return; }
     
                FtpWebRequest myRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
                myRequest.Credentials = new NetworkCredential(this.Username, this.Password);
                myRequest.Method = WebRequestMethods.Ftp.DownloadFile;
     
                FtpWebResponse response = (FtpWebResponse)myRequest.GetResponse();
                Stream responseStream = response.GetResponseStream();
                FileStream fs = new FileStream("C:/" + file, FileMode.Create);
     
                byte[] buffer = new byte[2000];
                int read = 0;
     
                do
                {
                    read = responseStream.Read(buffer, 0, buffer.Length);
                    fs.Write(buffer, 0, read);
                    fs.Flush();
                } while (!(read == 0));
     
                response.Close();
                responseStream.Close();
                fs.Close();
            }
        }
    }
    Dans mon "program.cs"

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Text;
     
    namespace Module_FTP
    {
        class Program
        {
            static void Main(string[] args)
            {
                FTP myFTP = new FTP{
     
                Server = "***.***.**.*",
                Username = "*****",
                Password = "*****"
            };
            //myFTP.Upload("Test", "C:/ftp/test.txt");
            myFTP.Download("Test", "test.txt");
            }
        }
    }

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Nako_lito Voir le message
    je veux bien, mais ou est ce que je passe mes id de connexion avec cette méthode ?
    Ah oui pardon, j'ai oublié ça...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (WebClient wc = new WebClient())
    {
        wc.Credentials = new NetworkCredential("****", "*****");
        wc.UploadFile("ftp://***.***.***.***/chemin/du/fichier.txt", @"C:\test.txt");
    }

  6. #6
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    ouais, j'avais fais ça aussi avant de reposter, tjrs le même soucis.

    j'ai vu sur les forum qu’apparemment on ne pourrait pas uploader derrière les proxy :s
    Meme si on regle la valeur du proxy a null. ... une idée ?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre... Elle ressemble à quoi exactement ton URL ?

  8. #8
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    l'url de connexion au ftp est du genre ftp://192.168.10.1

    alors, j'a testé avec en plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                request.Proxy = null;
                request.UsePassive = true;
    Ca fonctionne pas non plus, donc le mode passif n'est aparement pas en cause, je me suis renseigné, le ftp est pas planqué derriere un proxy HTTP (ca causerai des soucis aparement depuis le framework 2.0), j'attaque le ftp en local.

    meme avec le UsePassive a false, c'est pas ça.

    Je peux uploader des fichiers sur le ftp mais pas en downloader ... c'est la misère.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Nako_lito Voir le message
    l'url de connexion au ftp est du genre ftp://192.168.10.1
    Bah il faut préciser le chemin du fichier... Par exemple ftp://192.168.10.1/chemin/du/fichier.txt

  10. #10
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    C'est fait dans le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Uri serverUri = new Uri("ftp://" + this.Server + "/" + directory + "/" + file);
    avec this.server = "ftp://192.168.10.1",
    directory = "Test"
    file = "test.txt"

  11. #11
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    Ce que je comprend pas dans le code, c'est pourquoi on ferme le flux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                //ferme le flux
                stream.Close();
    si on a pas encore copié les données ?

    Ou alors j'interprète mal les infos.
    Help :s

    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
            public void Upload(string DossierFTP, string addresseFichierLocal)
            {
                //définit la connexion URI
                Uri serverUri = new Uri("ftp://" + this.Server + "/" + DossierFTP + "/");
                //si la norme URI ne correspond pas a un FTP, fin de l'opération
                if (serverUri.Scheme != Uri.UriSchemeFtp)
                { return; }
     
                //instancie l'objet myRequest
                FtpWebRequest myRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
                //passe le parametre du proxy a null
                myRequest.Proxy = null;
                //passe en mode passif
                myRequest.UsePassive = true;
                //renseigne les identifiants de connexion au server avec les éléments passés en paramètre
                myRequest.Credentials = new NetworkCredential(this.Username, this.Password);
                //choisi la méthode d'upload de l'objet myRequest
                myRequest.Method = WebRequestMethods.Ftp.UploadFile;
                //définit le chemin du fichier a uploader
                FileStream stream = File.OpenRead(addresseFichierLocal);
                //défnit la taille du buffer
                byte[] buffer = new byte[stream.Length];
                //lit le flux de données
                stream.Read(buffer, 0, buffer.Length);
                //ferme le flux
                stream.Close();
                //récupère les données enregistrée dans le flux pour les écrire en suivant
                Stream reqStream = myRequest.GetRequestStream();
                reqStream.Write(buffer, 0, buffer.Length);
                reqStream.Close();
            }

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Nako_lito Voir le message
    Ce que je comprend pas dans le code, c'est pourquoi on ferme le flux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                //ferme le flux
                stream.Close();
    si on a pas encore copié les données ?
    Bah c'est le flux du fichier local, dont tu as chargé les données dans un buffer en mémoire, donc tu n'as plus besoin de ce flux

    Par contre cette technique est pas terrible, si tu veux transférer des gros fichiers il vaut mieux éviter de charger le fichier entier en mémoire. WebClient.UploadFile fait ça proprement et sans prise de tête...

  13. #13
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    bon, j'ai trouvé un code pour up qui fonctionne, donc je partage :

    dans une classe a part du programme :

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Net;
     
    namespace Module_FTP
    {
        public class FTP
        {
            public string Server { get; set; }
            public string Username { get; set; }
            public string Password { get; set; }
     
            // parametre : nom du fichier sur le dossier local, répertoire local ou est le fichier a uploader, dossier sur le FTP ou doit etre placé le fichier.
            public void Upload(string nomFichier, string repertoireLocal, string dossierFTP)
            {
                FileInfo fileInf = new FileInfo(repertoireLocal + "/" + nomFichier);//"C:/test.txt"
                FtpWebRequest reqFTP;
                // Create FtpWebRequest object from the Uri provided
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + this.Server + "/" + dossierFTP + "/" + nomFichier));
                // Provide the WebPermission Credintials
                reqFTP.Credentials = new NetworkCredential(this.Username,this.Password);
                // By default KeepAlive is true, where the control connection is 
                // not closed after a command is executed.
                reqFTP.KeepAlive = false;
                reqFTP.UsePassive = true;
                reqFTP.Proxy = null;
                // Specify the command to be executed.
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                // Specify the data transfer type.
                reqFTP.UseBinary = true;
                // Notify the server about the size of the uploaded file
                reqFTP.ContentLength = fileInf.Length;
                // The buffer size is set to 2kb
                int buffLength = 2048;
                byte[] buff = new byte[2048];
                int contentLen;
                // Opens a file stream (System.IO.FileStream) to read 
                //the file to be uploaded
                FileStream fs = fileInf.OpenRead();
     
                try
                {
                    // Stream to which the file to be upload is written
                    Stream strm = reqFTP.GetRequestStream();
                    // Read from the file stream 2kb at a time
                    contentLen = fs.Read(buff, 0, buffLength);
                    // Till Stream content ends
                    while (contentLen != 0)
                    {
                        // Write Content from the file stream to the 
                        // FTP Upload Stream
                        strm.Write(buff, 0, contentLen);
                        contentLen = fs.Read(buff, 0, buffLength);
                    }
     
                    // Close the file stream and the Request Stream
                    strm.Close();
                    fs.Close();
                }
                catch
                {
                }
            }
     
            // parametre : nom du fichier téléchargé sur le FTP, répertoire d'emplacement dans le FTP, emplacement ou sera enregistré le fichier
            public void Download(string nomFichier, string repertoireFTP, string repertoireLocal)
            {
                Uri serverUri = new Uri("ftp://" + this.Server + "/" + repertoireFTP + "/" + nomFichier);
                if (serverUri.Scheme != Uri.UriSchemeFtp)
                { return; }
     
                FtpWebRequest myRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
                myRequest.Credentials = new NetworkCredential(this.Username, this.Password);
                myRequest.Method = WebRequestMethods.Ftp.DownloadFile;
     
                FtpWebResponse response = (FtpWebResponse)myRequest.GetResponse();
                Stream responseStream = response.GetResponseStream();
                FileStream fs = new FileStream(repertoireLocal + nomFichier, FileMode.Create);
     
                byte[] buffer = new byte[2048];
                int read = 0;
     
                do
                {
                    read = responseStream.Read(buffer, 0, buffer.Length);
                    fs.Write(buffer, 0, read);
                    fs.Flush();
                } while (!(read == 0));
     
                response.Close();
                responseStream.Close();
                fs.Close();
            }
        }
    }
    Dans la classe program :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Text;
     
    namespace Module_FTP
    {
        class Program
        {
            static void Main(string[] args)
            {
                FTP myFTP = new FTP{
     
                Server = "***.***.**.*",
                Username = "****",
                Password = "****"
            };
     
                myFTP.Upload("test.txt", "C:/", "Test");
                System.Threading.Thread.Sleep(500);
                myFTP.Download("test.txt", "Test", "C:/ftp/");
            }
        }
    }
    pour ce qui est du webclient, je veux bien l'utiliser, mais ca fonctionne pas, donc bon ...

  14. #14
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    prochaine étape, adapter a des liste de fichier dans un dossier et a des utilisateurs différents.

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

Discussions similaires

  1. [2005] Import fichier plat avec accent
    Par tornade69 dans le forum SSIS
    Réponses: 1
    Dernier message: 09/06/2011, 11h05
  2. Automatiser Import fichier plat
    Par mboubidi dans le forum Administration
    Réponses: 10
    Dernier message: 23/10/2010, 16h00
  3. Probleme import fichier plat en VBA
    Par spaukensen dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2008, 21h16
  4. Import fichier.txt sur FTP vers MySql
    Par thiper dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 19/06/2006, 10h54
  5. Importation fichier plat vers Mysql
    Par xender dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/05/2006, 22h36

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