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

MFC Discussion :

pb suppression répertoire non vide


Sujet :

MFC

  1. #21
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    si les deux chaines sont egales, comme dirait mulder la vérité est ailleurs ....
    soit tu as un bug de dedordement mémoire ou autre ou le contexte de test, en bref ce n'est pas la fonction qui est en cause .
    le plus simple pour le verifier c'est de générer un nouveau projet bidon, style boite de dialogue et de refaire le test.

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 18
    Par défaut
    si les deux chaines sont egales, comme dirait mulder la vérité est ailleurs ....
    Justement non, la fonction strcmp retourne 1, cela signifie que ma CString subRep est supérieure à ma chaîne de caractères.
    Je vais faire d'autres tests ce week-end dans un nouveau projet tout simple car en plus, je "pourris" mon code...

  3. #23
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    a mince j'ai inversé le sens du test ,
    tu peux faire un strlen dessus pour voir les longueurs ?
    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TRACE("\nLen CString:%d",strlen(subRep));

  4. #24
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 91
    Par défaut
    J'ai eu le même problème et apparemment c'est dû à ça :
    An additional NULL character must be appended to the end of the final name to indicate the end of pFrom
    Le code suivant m'a permis de résoudre le problème (il y a peut être plus simple que le malloc!) :

    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
    	SHFILEOPSTRUCT op;
     
    	char *dir = (char*) malloc(strRep.GetLength() + 2);
    	memcpy(dir, strRep.GetBuffer(0), strRep.GetLength());
    	dir[strRep.GetLength()] = 0;
    	dir[strRep.GetLength() + 1] = 0;
     
    	memset(&op, 0, sizeof(op));
     
    	op.hwnd = NULL;
    	op.wFunc = FO_DELETE;
    	op.pFrom = dir;
    	op.pTo = NULL;
    	op.fFlags = FOF_NOCONFIRMATION|FOF_ALLOWUNDO;
    	op.fAnyOperationsAborted = FALSE;
    	op.lpszProgressTitle = NULL;
    	op.hNameMappings = NULL;
    	SHFileOperation(&op);
     
    	if (dir) free(dir);

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut
    J'ai trouvé la solution ( ce n'est pas de moi mais je vous donne le fruit de mes recherches ) : il faut que pFrom se termine par un double NULL.
    Donc ca donnera ca :

    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
    bool myDeleteDirectory(CString repertoire, bool suppressionDefinitive = true)
    {
       repertoire += '\0' ;
       SHFILEOPSTRUCT sh;
       sh.hwnd = NULL;
       sh.wFunc = FO_DELETE;
       sh.pFrom = repertoire;
       sh.pTo = NULL;
       sh.fFlags = FOF_NOCONFIRMATION|FOF_SILENT;
       if(!suppressionDefinitive)
          sh.fFlags |= FOF_ALLOWUNDO;
       sh.fAnyOperationsAborted = FALSE;
       sh.lpszProgressTitle = NULL;
       sh.hNameMappings = NULL;
     
       return (SHFileOperation(&sh)==0);
    }
    Et là le miracle se produit ^^, si vous pouviez le préciser sur la faq ca serai cool

    En espèrant que ca aidera quelqu'un.

  6. #26
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    merci de ces précisions, c'est un oubli effectivement important, cela sera corrigé au plus vite

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2015, 09h09
  2. Réponses: 3
    Dernier message: 04/02/2010, 15h37
  3. suppression d'un répertoire non vide
    Par leame dans le forum MFC
    Réponses: 2
    Dernier message: 17/06/2009, 12h51
  4. supprimer répertoire non vide
    Par taly dans le forum Langage
    Réponses: 33
    Dernier message: 03/08/2006, 19h49

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