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++Builder Discussion :

IdFTP : Récupération d'un fichier sur ftp ?


Sujet :

C++Builder

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut IdFTP : Récupération d'un fichier sur ftp ?
    Bonjour,

    Voici un code pour tester la connection FTP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                    Memo1->Lines->Add("AFTER_LOGIN");
                    IdFTP1->ChangeDir("/data/observations/");
                    IdFTP1->List(ListBox1->Items);
                    TMemoryStream *pMemoire = new TMemoryStream;
                    IdFTP1->Get("DATA.TXT",pMemoire,true);
                    Memo2->Lines->LoadFromStream(pMemoire);
                    delete pMemoire;
    Mon memo2 reste vide et ma connection est close...
    Resolving hostname xxx.xxx.gov.
    Connecting to xxx.156.xxx.2xx.
    Connected.
    CONNECTED
    AFTER_LOGIN
    Starting FTP transfer
    Transfer complete
    Starting FTP transfer
    Transfer complete
    Connection established
    Ma liste de fichiers est complète.

    A priori, c'est ici que ça ne passe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IdFTP1->Get("DATA.TXT",pMemoire,true);
    Le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                    Memo1->Lines->Add("AFTER_LOGIN");
                    IdFTP1->ChangeDir("/data/observations/");
                    //IdFTP1->List(ListBox1->Items);
                    //TMemoryStream *pMemoire = new TMemoryStream;
                    //IdFTP1->Get("DATA.TXT",pMemoire,true);
                    IdFTP1->Get("DATA.TXT","DATA.TXT",true,false);
                    //Memo2->Lines->LoadFromStream(pMemoire);
                    Memo2->Lines->LoadFromFile("DATA.TXT");
                    //delete pMemoire;
    Savez-vous de quoi ça peut venir, le fait que mn pMemoire soit vide ?

    Merci d'avance,
    Mathieu
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  2. #2
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    A part si ton fichier est vide il n'y aucune raison pour que MemoryStream soit vide.Peut être faut il simplement remettre ton TMemoryStream à 0
    avant de le charger dans le Memo...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                    Memo1->Lines->Add("AFTER_LOGIN");
                    IdFTP1->ChangeDir("/data/observations/");
                    IdFTP1->List(ListBox1->Items);
                    TMemoryStream *pMemoire = new TMemoryStream;
                    IdFTP1->Get("DATA.TXT",pMemoire);
     
                    pMemoire->Position=0;         //<---------------------       
     
                    Memo2->Lines->LoadFromStream(pMemoire);
                    delete pMemoire;

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut yop
    Salut,

    Je viens d'essayer, le problème persiste... C'est étrange !

    Merci,
    Mathieu
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  4. #4
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    code testé et qui marche avec le fichier situé :

    ftp://pbil.univ-lyon1.fr/pub/datasets/NAR94/data.txt


    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
           Memo1->Lines->Add("AFTER_LOGIN");
           IdFTP1->ChangeDir("/pub/datasets/NAR94");
            IdFTP1->List(ListBox1->Items);
            TMemoryStream *pMemoire = new TMemoryStream();
            try{
               IdFTP1->Get("data.txt",pMemoire);
            }catch(Exception &e){
               Memo1->Lines->Add("Echec lors du transfert");
            }
            pMemoire->Position=0;
            Memo2->Lines->LoadFromStream(pMemoire);
            delete pMemoire;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
          if(SpeedButton1->Down){
            try{
              IdFTP1->Connect();
            }catch(Exception &e){
              ShowMessage(e.Message);
            }
          }else{
              if (IdFTP1->Connected())IdFTP1->Disconnect();
          }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::IdFTP1Status(TObject *axSender,
          const TIdStatus axStatus, const AnsiString asStatusText)
    {
            Memo1->Lines->Add(asStatusText);
    }
    //---------------------------------------------------------------------------

    par contre, il faut attendre un peu avant affichage ,
    alors que le fichier fait que 104 ko.

    Ca ma l'air pas très efficace comme méthode au niveau performance

  5. #5
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut yop
    Salut,

    J'ai suivi ce que tu as 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
     
    void __fastcall TForm1::IdFTP1AfterClientLogin(TObject *Sender)
    {
            try
            {
                    IdFTP1->ChangeDir("/data/observations");
                    TMemoryStream *pMemoire = new TMemoryStream;
                    IdFTP1->Get("DATA.TXT",pMemoire);
                    pMemoire->Position = 0;
                    Memo2->Lines->LoadFromStream(pMemoire);
                    delete pMemoire;
            }
            catch(Exception &Exp)
            {
                    MessageDlg(Exp.Message, mtInformation, TMsgDlgButtons() << mbOK, 0);
            }
    }
    C'est beaucoup mieu
    J'ais mis un "/" à la fin du ChangeDir et la mise en position à 0 était après son assignation au Memo

    Merci,
    Mathieu
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  6. #6
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut yop
    Salut,

    A noter que ce qui mets du temps c'est cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IdFTP1->List(ListBox1->Items);
    Cette ligne permet de lister les fichiers du répertoire mais dans mon cas ce n'est pas utile.

    Cordialement,
    Mathieu
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

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

Discussions similaires

  1. Récupération de nouveaux fichiers sur FTP
    Par Heremion dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2014, 13h09
  2. [FTP] Récupération taille fichier sur ftp
    Par Kerod dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2006, 03h18
  3. envoyer un fichier sur ftp
    Par alex01pernot dans le forum Web & réseau
    Réponses: 3
    Dernier message: 26/03/2006, 18h22
  4. [Upload] upload fichier sur ftp free
    Par Halukard dans le forum Langage
    Réponses: 61
    Dernier message: 12/02/2006, 20h50
  5. [C#] [FTP] Envoi et suppression fichier sur ftp NON ANONYME!
    Par djsbens dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/03/2005, 10h20

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