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

Bibliothèques Discussion :

[libssh] Comment supprimer un répertoire et ses sous-répertoires fils ?


Sujet :

Bibliothèques

  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut [libssh] Comment supprimer un répertoire et ses sous-répertoires fils ?
    je n'arrive pas à supprimer un repertoire et ses sous repertoires fils avec libssh.

    j'avais d'abord fait une fonction recursive qui supprime à la fois les fichiers et les sous repertoires puis comme ca ne fonctionnait pas, j'ai fait deux fonctions,une premiere qui fonctionne et supprime tous les fichiers dans le repertoire et ses sous repertoires, et une deuxieme qui ne fonctionne pas qui supprime le repertoire et ses sous repertoires (qui ne contienne alors qu eventuellement des sous repertoires ou rien)

    quelqu un a t'il deja utilisé libssh pour supprimer des repertoires et leurs sous repertoires ?

    voila le code de la derniere fonction qui supprime les repertoires et qui ne fonctionne pas (je l'avais aussi fait de deux facons) :

    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
     
    bool sshobj::supprimerepserveur(QString destdir)
    {
        int rc;
        char * p;
         char dat[10000];
         bool res=true;
         p=destdir.toUtf8().data();
         strcpy(dat,p);
     
        sftp_dir dir;
        sftp_attributes attributes;
     
        dir = sftp_opendir(m_sftp, dat);
        if (!dir)
        {
     
          return false;
        }
     
        while ((attributes = sftp_readdir(m_sftp, dir)) != NULL)
        {
            switch(attributes->type)
            {
     
             case SSH_FILEXFER_TYPE_DIRECTORY:
             {
                                                QString rep=QString::fromUtf8(attributes->name);
                                                bool res2=supprimerepserveur(rep);
                                                if (res2==false)
                                                    res=false;
     
     
                                                break;
            }
            case SSH_FILEXFER_TYPE_REGULAR:
            {
     
     
                                                break;
            }
             case SSH_FILEXFER_TYPE_SYMLINK:
            {
                break;
            }
             case SSH_FILEXFER_TYPE_SPECIAL:
            {
            break;
            }
             case SSH_FILEXFER_TYPE_UNKNOWN:{
                                                break;
            }
            }
     
           sftp_attributes_free(attributes);
        }
        if (!sftp_dir_eof(dir))
        {
          sftp_closedir(dir);
     
        }
        rc = sftp_closedir(dir);
        rc = sftp_rmdir(m_sftp,dat);
        if (rc<0)
            res =false;
     
        return res;
     
     
     
    }
    PS: le parametre destdir est le chemin du repertoire sur le serveur sftp

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    le probleme vient de la bonne utilisation de sftp_rmdir (et peut etre aussi dans l'algo avec mais j'ai essayé plusieurs solutions )et je n'ai pas trouvé d'exemple d'utilisation de cette fonction sftp_rmdir .
    libssh est utilisé dans kde, mais ca fait beaucoup de code à regarder pour trouver où....

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    mon probleme est resolu: d'une part j'avais oublié le cas ou le repertoire est "." et ".." d'autre part attributes->name contient juste le nom du repertoire/fichier dans le repertoire courant donc il faut que je construise le chemin complet pour rappeler la fonction recursive.
    maintenant cela fonctionne bien.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/05/2015, 10h33
  2. Comment balayer un répertoire et ses sous répertoires ?
    Par Thoustra dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 20/06/2011, 16h49
  3. Réponses: 0
    Dernier message: 16/04/2008, 21h59
  4. Réponses: 5
    Dernier message: 25/06/2007, 23h25
  5. Réponses: 5
    Dernier message: 18/01/2007, 09h04

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