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 :

RemoveDirectory et TreeView


Sujet :

C++Builder

  1. #1
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut RemoveDirectory et TreeView
    bonjour a tous, je vien ici demander de l'aide concernant un fonction fort simple: RemoveDirectory.
    En effet que j'utilise un TShellTreeView de ksdev ou un TspSkinTreeView de DynamicSkinForm(almdev) ou encore simlplement le TDirectoryListBox des composants Win3.1 fournis avec BCB (j'utilise BDS2006), il semble que bien que selon le code ci-dessous, la fonction marche bien, le dossier reste present( dans l'explorer comme dans les treeview ) bien qu'inaccessible jusqu'a ce que l'application soit fermée, et disparait alors du shell...


    // je cré d'abord un repertoire en passant par là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        if( !TeShellTreeView1->Selected ) return;
        AnsiString name = TeShellTreeView1->Path+"Newfolder...";
        if( CreateDirectory( name.c_str(), NULL ) == FALSE )
            DIALOG_OK( "Error during directory creation...!");
    }

    // puis je le selectionne dans le treeview et je souhaite le supprimer en passant par la...
    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
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
        TeShellTreeView1->AutoRefresh = false;
        AnsiString path = TeShellTreeView1->Path;
        TTreeNode* keep = TeShellTreeView1->Selected;
        TeShellTreeView1->Selected = TeShellTreeView1->Selected->Parent;
        TeShellListView1->Root = TeShellTreeView1->Path;
        SetCurrentDirectory( TeShellTreeView1->Path.c_str() );
     
        TeShellListView1->Items->BeginUpdate();
        TeShellTreeView1->Items->BeginUpdate();
        if( RemoveDirectory( path.c_str() ) == FALSE )
            DIALOG_OK( "Directory contains media(s)..! \nPlease empty before being able to delete it...!");
     
        TeShellTreeView1->Items->Delete( keep );
        TeShellTreeView1->Items->EndUpdate();
        TeShellListView1->Items->EndUpdate();
     
        TeShellTreeView1->Refresh( TeShellTreeView1->Selected );
        TeShellTreeView1->AutoRefresh = true;
        TeShellTreeView1->Repaint();
    }
    je suis un peu perdu par ce problème ou on dirai que le repertoire ne peu disparaitre completement du shell (que le repertoire est été créé par l'appli ou non d'ailleurs ) seulement une fois que le processus qui l'a supprimer se termine...
    Merci pour votre attention...

  2. #2
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Il semblerait que ce soit a cause du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetCurrentDirectory( TeShellTreeView1->Path.c_str() );
    Tu ne peut pas supprimer le répertoire sélectionné comme répertoire courant, pour le simple fait qu'il este ouvert. Il faudrait simplement changer le répertoire courant avant de chercher a le supprimer

  3. #3
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    en fait le setcurrentdirectory correspond au repertoire parent d'apres les deux lignes precedent cet appel de fonction... mais que cette ligne y soit ou non ne change rien au problème...

  4. #4
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Hmmm ha oui pardon, j'métais emmelé les yeux.

    Mais a part si le fichier est ouvert je vois mal pourquoi il ne veut pas le supprimer.
    As-tu essayé de mettre un point d'arret sur le RemoveDirectory, et de supprimer le répertoire à la main quand tu arrives a ce point?

  5. #5
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Par défaut
    alors j'ai essayé ce que tu m'a dis et le repertoire se supprime bien a la main par contre dès que je relance le soft, le RemoveDirectory echou (normal), et le treeview se vide et ne s'actualise plus...

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. TreeView -> ajouter un child à un noeud donné
    Par fake dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/03/2003, 17h14
  3. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  4. où y a t il un tutorial pour le Treeview ??
    Par silvermoon dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h30
  5. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

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