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 :

[TNMFTP] distinguer fichiers et répertoires


Sujet :

C++Builder

  1. #1
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut [TNMFTP] distinguer fichiers et répertoires
    Bonjour,
    j'utilise le composant TNMFTP qui est très simple.
    Cependant existe-il une solution pour distinguer fichiers et répertoires, pour par exemple, parcourir en récursif?

    Si ce n'est pas possible directement...une piste?

    merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Lorsque tu fais un appel à "List" (PAS NList), un événement "OnSuccess" est déclanché avec TCmdType=cmdList (si tu as mis ParseList=true, ce qui est vivement conseillé).

    Depuis OnSuccess, tu peux alors consulter tous les fichiers et répertoire grâce à la propriété FTPDirectoryList.

    FTPDirectoryList->name->Strings[i] pour le nom de la i_ème entrée
    FTPDirectoryList->Size->Strings[i] pour la taille de la i_ème entrée
    FTPDirectoryList->ModifDate->Strings[i] pour la date de modif de la i_ème entrée, et
    FTPDirectoryList->Attribute->Strings[i] pour les attributs de la i_ème entrée

    Les directories ont un attribut "d", ce qui te permet de les distinguer des fichiers

    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
    void __fastcall TForm1::FTPSuccess(TCmdType Trans_Type)
    {
     
      if (Trans_Type!=cmdList) return;
     
      ListBox1->Clear();
     
      for (int i=0; i<FTP->FTPDirectoryList->name->Count;++i) {
     
        // Extract data
        AnsiString filename=FTP->FTPDirectoryList->name->Strings[i];
        AnsiString size=FTP->FTPDirectoryList->Size->Strings[i];
        AnsiString date=FTP->FTPDirectoryList->ModifDate->Strings[i];
        AnsiString attributes=FTP->FTPDirectoryList->Attribute->Strings[i];
     
        // Apply command to normal files and folders (remove "." and ".." folders)
        if ((filename!=".")&&(filename!="..")) {
          if (attributes.Pos("d")>0) {
            ListBox1->AddItem(filename+" est un répertoire",0);
          } else if (attributes.Pos("l")>0) {
            ListBox1->AddItem(filename+" est un lien (raccourcis)",0);
          } else {
            ListBox1->AddItem(filename+" est un fichier",0);
          }
        }
     
      }
     
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
      FTP->Connect();
      FTP->List();
      FTP->Disconnect();
     
    }

  3. #3
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    yes, excellent....
    je devrais me débrouiller avec ça.

    merchi

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 23
    Par défaut ATTENTION LIENS
    Salut,
    Il se peut que dans le répertoire du serveur il y ait des liens vers des sous-répertoires ou vers des fichiers. Dans ce cas, l'attribut FTPDirectoryList->Attribute contient un 'l' mais pas de 'd', et rien ne permet de savoir si l'élément est un répertoire ou un fichier. Dans cette hypothèse, une seule solution : repérer tous les FTPDirectoryList->Attribute qui commencent par 'l' et tenter un ChangeDir(). Si le ChangeDir() échoue c'est un fichier... sinon un sous-répertoire.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2006, 17h23
  2. Réponses: 23
    Dernier message: 23/05/2006, 16h52
  3. Lister les fichiers du répertoire contenant une applet
    Par uncle bobo dans le forum Applets
    Réponses: 1
    Dernier message: 05/05/2006, 16h55
  4. Renommage fichiers et répertoire recursif
    Par flasomm dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2005, 22h58
  5. [fichier] savoir si X est fichier ou répertoire
    Par iubito dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2003, 13h55

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