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# Discussion :

Récupérer un Path d'un ComboBox, pour supprimer un répertoire!


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un Path d'un ComboBox, pour supprimer un répertoire!
    Bonjour,
    Je suis novice en programmation C#. Donc la question va vous paraître simple, mais moi, je bataille depuis plusieurs jours.

    Je dois créer une petite appli "A" qui va s'occuper de supprimer une autre appli "B". Apparemment, il suffi de supprimer le répertoire d'installation de "B" ainsi que ses raccourcis.
    J'ai donc réussi à réaliser "A", dans le cas d'une installation par défaut de "B"(c:/programfile/appliB/).

    Premier problème, je ne sais pas supprimer un raccourcis.

    Deuxième problème, dans le cas où on installe "B" dans une autre partition que (c:/) cela me pose problème.
    Pour cela, j'ai réussi a lister les différentes partitions du poste local, que j'insère dans un ComboBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public Form2()
            {
                InitializeComponent();
                comboBox1.BeginUpdate();
                string[] unites_logiques = Directory.GetLogicalDrives();
     
                for (int j = 1; j < unites_logiques.Length; j++)
                {
                    comboBox1.Items.Add(unites_logiques[j]);
     
                }
                comboBox1.EndUpdate();
            }
    Pour l'instant...no problem! Mais c'est à ce moment là que ça se gâte. Il faut que l'utilisateur choisisse une partition proposée dans le combobox et puis qu'il clique sur "désinstaller" pour que la magie opère!

    CODE du combobox où l'on choisi la partition:

    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
     
    private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
            {
                button2_clear.Enabled = true;
     
     
                string combo_tab = this.comboBox1.SelectedItem.ToString();
     
                //apparemment il faut un chemin du style: @"X:\\"
                change_path="@"+"\"" + combo_tab +"\""; 
                //la variable change_path a été déclarée au début de la classe                                                 
                //comme : public string change_path
     
                return ;
            }
    CODE du bouton "désinstaller":

    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
     
    private void button2_clear_Click(object sender, EventArgs e)
            {
     
     
                label2.Text = "Recherche du dossier d'installation de appli_B.";
                try
                {
                    DialogResult key = MessageBox.Show("Etes-vous sûr de vouloir désinstaller appli_B?", "Procédure de désinstallation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
     
                    bool oui = (key == DialogResult.Yes);
                    if (oui)
                    {
     
     
     
                        this.Cursor = Cursors.WaitCursor;
     
                        bool applic = false;
                        search_folder("appli_B", change_path ); 
     
                        this.Cursor = Cursors.Default;
     
                        if (!applic)
                        {
     
                            MessageBox.Show("Impossible de trouver le répertoire\nd'installation de appli_B dans le lecteur " + comboBox1.SelectedItem.ToString(), "Erreur!", MessageBoxButtons.OK, MessageBoxIcon.Error);
     
                        }
     
                    }
                    else 
                    {
                        Application.Exit();
                    }
     
                }
     
                catch (Exception ex)
                {
                    // en quittant on enregistre les infos dans le fichier log
                    StreamWriter Log = new StreamWriter(MyLog, true);
                    Log.WriteLine(DateTime.Now);
                    Log.WriteLine(ex.Message);
                    Log.WriteLine("\nFermeture du programme---------------------------------------------------------");
                    Log.WriteLine("\n");
                    Log.Close();
                }
     
            }
    CODE de la méthode search_folder("appli_B", change_path ):

    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
     
    private void search_folder(string foldername, string path)
            {
                this.Cursor = Cursors.WaitCursor;
     
     
                DirectoryInfo[] MyDirectories;
                DirectoryInfo Da = new DirectoryInfo(path);
                label2.Text = "suppression du dossier d'installation.";
     
                try
                {
                    MyDirectories = Da.GetDirectories();
                    if (MyDirectories.Length > 0)
                    {
                        foreach (DirectoryInfo D_In in MyDirectories)
                        {
                            this.search_folder(foldername, D_In.FullName);
     
                            if (D_In.Name.ToLower() == foldername.ToLower())
                            {
     
                                //affichage et mise en route de la progressBar
                                progressBar1.Visible = true;
                                this.progressBar1.Maximum = MyDirectories.Length;
                                for (int i = 0; i < MyDirectories.Length; i++)
                                {
                                    this.progressBar1.Value = i;
                                    Refresh();
                                }
     
                                //efface de façon irréversible, tous les dossiers, sous dossiers et les fichiers, sans aucunes conditions.
                                Directory.Delete(D_In.FullName, true);
     
                                progressBar1.Visible = false;
                                button2_clear.Enabled = false;
                                label2.Text = "";
                                applic = true;
     
                                MessageBox.Show("Désinstallation réussie!", "Procédure de désinstallation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                Application.Exit();
                            }
     
                        }
                    }
                    else
                    {
                        applic = false;
     
     
                    }
     
     
                }
                catch (Exception mes)
                {
                    // on enregistre les infos dans le fichier log
                    StreamWriter Log = new StreamWriter(MyLog, true);
                    Log.WriteLine(DateTime.Now);
                    Log.WriteLine(mes.Message);
                    Log.WriteLine("\n");
                    Log.Close();
     
                }
            }
    Voilà tout! Si vous pouviez m'aider, ça m'aiderait énormément!
    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Qu'elle est le problème avec tes applis ? Cela plante ou tu ne veut plus que l'utilisateur choisisse la partition ?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 53
    Points
    53
    Par défaut
    je n'ai pas trés bien compris quel était ton problème par contre il me semble que si tu fais :

    this.search_folder(foldername, D_In.FullName);


    dans la fonction search_folder tu appelles ta fonction à l'intérieur d'elle même donc tu réinitialises MyDirectories = Da.GetDirectories();
    à chaque passage
    donc tu reviens au début de ta boucle à chaque fois et tu réappel encore la même fonction d'où une boucle infinie il me semble.

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Voilà ce que m'affiche le fichier log:

    07/09/2007 11:33:49
    Value cannot be null.
    Parameter name: path

    Fermeture du programme---------------------------------------------------------

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Et donc la désinstallation ne s'effectue pas !!!

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    utilises tu une variable "path" dans ton programme ?
    Si oui peut tu nous montrer le code la concernant ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Qu'est-ce donc, une variable 'path'?

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Heu.... Le log est bien un log généré par ton appli ?
    Sais tu ce qu'elle peut écrire dedans ?

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Voilà ce que m'affiche le fichier log:

    07/09/2007 11:33:49
    Value cannot be null.
    Parameter name: path

    Fermeture du programme---------------------------------------------------------

  10. #10
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Vérifie le contenu de ta variable change_path, et donc le comboBox1.SelectedItem. Vu le log, ca viendrait de là. D'ailleurs, au passage, tu initialises ta variable bizarrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    change_path="@"+"\"" + combo_tab +"\"";
    Le @ ici ne sert à rien. Tu confonds avec son utilisation pour les string Verbatim, mais ici il ne sert à rien, tout comme les guillemets. En fait la variable change_path ne sert à rien dans ton code, car tu peux directement passer par la ComboBox au moment où tu as besoin de l'information.

    Et tant qu'on y est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    comboBox1.BeginUpdate();
    string[] unites_logiques = Directory.GetLogicalDrives();
     
    for (int j = 1; j < unites_logiques.Length; j++)
    {
        comboBox1.Items.Add(unites_logiques[j]);
    }
    comboBox1.EndUpdate();
    Serait mieux ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    comboBox1.Items.AddRange(Directory.GetLogicalDrives());
    // On enlève le lecteur de disquette
    comboBox1.Items.RemoveAt(0);
    dans un premier temps en tout cas car l'idéal serait d'utiliser WMI pour récupérer uniquement les lecteurs associés à des disques durs (car il peut y avoir plusieurs lecteurs de disquette, ou aucun, ainsi que des lecteurs CD, DVD, clés USB, ...), à condition que WMI soit disponible sur les postes amenés à utiliser l'application.

    Pour finir, la suppression récursive de répertoire et déjà gérée nativement en .Net avec la méthode statique Delete de la classe Directory

    Pour j-Christo
    Citation Envoyé par j-Christo Voir le message
    je n'ai pas trés bien compris quel était ton problème par contre il me semble que si tu fais :

    this.search_folder(foldername, D_In.FullName);

    dans la fonction search_folder tu appelles ta fonction à l'intérieur d'elle même donc tu réinitialises MyDirectories = Da.GetDirectories();
    à chaque passage
    donc tu reviens au début de ta boucle à chaque fois et tu réappel encore la même fonction d'où une boucle infinie il me semble.
    Il n'y a aucune réinitialisation de MyDirectories. Sur des méthodes récursives chaque appel à son propre contexte et donc une variable locale à la méthode ne peut être réinitialisée. Ensuite il n'y a pas de boucle infinie puisqu'il teste s'il y a des sous-répertoires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (MyDirectories.Length > 0)
    et s'il n'y en a pas il sort de la méthode normallement, donc pas de boucle infinie car il y a bien un point de sortie

  11. #11
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Merci, je vais tester!

  12. #12
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Merci modérateur, ça marche!!!!

    Par contre, je voulais te demander. Comment supprime-t'on un raccourci d'un fichier??

  13. #13
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Un raccourci est un fichier avec une extension .lnk. Il faut supprimer ce fichier pour supprimer le raccourci.

    N'oublie pas le bouton après

  14. #14
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Récupérer un path du combobox
    Merci!!!

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

Discussions similaires

  1. Récupérer la sélection d'un combobox pour sqlite3
    Par MisterPython dans le forum GUI
    Réponses: 4
    Dernier message: 24/01/2015, 07h54
  2. Je bloque pour supprimer un répertoire récalcitrant
    Par c_mon_identifiant dans le forum Shell et commandes GNU
    Réponses: 45
    Dernier message: 21/10/2014, 21h23
  3. [Delphi for PHP] Récupérer les données d'un Datagrid pour une combobox ou listbox
    Par Truebison dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/08/2007, 09h27
  4. batch pour supprimer un répertoire
    Par Jérémy Lefevre dans le forum Windows
    Réponses: 1
    Dernier message: 19/02/2007, 14h28
  5. Réponses: 2
    Dernier message: 29/08/2006, 13h59

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