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++/CLI Discussion :

Methode GetDrives() sur les lecteurs


Sujet :

C++/CLI

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut Methode GetDrives() sur les lecteurs
    Bonsoir les experts;

    Sous XP Ed Fam. avec Microsoft Studio 2005 C++

    Je veux "lister" dans une ListBox les noms des lecteurs logiques de mon PC avec des infos complémentaires de "espace occupé" et "espace libre" ....

    En consultant la doc MSDN , j'ai trouvé le descriptif de la classe "DriveInfo" et à lire la doc je découvre la méthode GetDrives() qui me liste tous les lecteurs logiques..... "une méthode faite pour moi !!!" me disais-je (je plaisante)

    aussi voici mon code :

    array<DriveInfo^> ^ allDrives = DriveInfo::GetDrives();

    for each (DriveInfo^ d in allDrives)
    {
    String^ mess = "";
    String^ nom ="";
    mess = String::Concat(" Drive ", d->Name, " Total size = ", d->TotalSize->ToString());

    listBox1->Items->Add( mess);
    }

    Pas de blème à la compil mais à l'exécution ce message insultant " Ce volume ne contient de système de fichiers connu....... Vérifiez si ce volume n'est pas endommagé" ... Un comble !!!

    Pourquoi ça ne marche pas ???

    Je sais , j'ai consulté la FAQ C++/CLI qui conseille la methode GetLogicalDrives() ... mais suis têtu ..... tout indique dans la doc que GetDrives() est la methode rêvée et adequate pour ce genre d'operation d'autant que la classe DriveInfo permet de fournir tous les renseignements concernant tous les lecteurs et trés facilement d->Name, d->TotalSize, d-> TotalFreeSpace .....

    Merci d'avance de votre aide
    Je sais je reviendrai ....
    A+++++++++;

  2. #2
    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
    parce que le premier item que tu testes ca doit etre la disquette qui n'est pas dans le lecteur, il faut que tu testes si elle est dispo avant de demander sa taille :

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut Methode GetDrives()
    Merci nico-pyrigth pour ton aide.

    Je me suis rabattu sur la méthode GetLocalDrives() , ... j'ai suivi ton conseil dans la FAQ C++/CLI et ça marche bien...
    Mais à une autre occasion , je fouillerai la méthode GetDrives() avec l'interrogation de savoir si le lecteur est prêt (IsReady).

    Mais je profite pour te poser une autre question , encore basique (désolé!):
    - dans mon code , le bouton "Ori_ok", et j'ai codé les actions à effectuer en cas de click utilisateur sur ce bouton..

    private: System::Void Ori_ok_Click(System::Object^ sender, System::EventArgs^ e)
    { ...........}

    et ça marche!!!
    A un autre endroit de mon code, je veux exécuter le code affecté à un click sur ce bouton "Ori_ok" (en simulant le click utilisateur). Dans la Classe Button, j'ai bien trouvé la méthode protégée OnClick( EventArgs^ e) ...
    dans mon code j'ai écrit:

    Ori_ok->OnClick(???) ;

    ....et la compil m'oblige à déclarer l'argument "référence à un évènement" ... et moi je n'ai déclaré aucun gestionnaire d'évènements.... moi je veux seulement simuler le click utilisateur sans plus....pour moi l'évènement est contenu dans la méthode non ????

    voila....
    Grand Merci d'avance de ton aide.
    oh oui je reviendrai ...

  4. #4
    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
    alors ... le plus simple ... c'est d'utiliser une fonction intermédiaire :

    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: System::Void Ori_ok_Click(System::Object^ sender, System::EventArgs^ e) 
    {
        MaMethodeOnClick();
    }
     
    void MaMethodeOnClick()
    {
        ......
    }
     
    void autreFonctionDouJeVeuxSimulerLeClick()
    {
        MaMethodeOnClick();
    }
    Sinon, il faut construire l'appel de la fonction avec les arguments qu'il faut (sender et eventargs)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut
    Merci nico-pyrigth pour ton aide.

    Ben finalement, j'ai revu et dû modifier le code à cet endroit pour améliorer l'appli....

    Mais profitant de ton expertise, (j'en abuse !!!) j'ai un autre pb à te soumettre... je vais essayer d'être bref...
    Mon but initial est de faire un utilitaire (sous Visual Studio 2005 C++/CLI) de sauvegarde d'un répertoire Origine vers un répertoire Destination de façon "intelligente" .... pas de copie bête de répertoires et fichiers ... mais verif de l'existence des fichiers et aussi comparaison de la date de dernière écriture (je copie seulement les fichiers nouveaux ou ceux modifiés depuis la dernière sauvegarde).... et tout cela marche finalement bien...
    Mais j'en arrive à mon pb:
    Cette sauvegarde peut durer plusieurs minutes.
    Et je désire , au final, que l'utilisateur puisse suivre, en direct, pas à pas le déroulement des opérations... donc j'ai créé une listBox (Name.listBox est "aff_list"). Et je veux afficher en temps réél, une action par ligne dans cette listBox aussi pour cela mon code:

    L'utilisateur a clické sur le bouton "Valid_finale" pour lancer l'opération de sauvegarde:
    private: System::Void Valid_finale_Click(System::Object^ sender, System::EventArgs^ e)
    {
    ......
    aff_list->Items->Add("Création du répertoire .....");
    aff_list->Items->Add("Suppression du fichier ....");
    aff_list->Items->ADD("Copie du fichier ...... Patientez !!!");
    .........
    }

    ca marche bien mais l'affichage ne se fait globalement qu'en fin de sauvegarde et non pas ligne apres ligne (ce serait mon souhait!). Donc , durant la sauvegarde, j'ai affiché une listBox vide.... je ne vois que le curseur vertical se réduire m'indiquant l'enregistrement de données dans la listBox. Le résultat final est bien celui que je veux....mais je voudrais un affichage à chaque opération (un précédent développement avec Console Windows fonctionnait à merveille).
    N'existe t -il pas un buffer d'affichage que l'on viderait à souhait pour actualiser l'affichage ??? un peu comme la fonction flush() qui oblige l'écriture de données dans un fichier texte, en forçant le vidage du buffer tampon, par exemple.

    Grand merci d'avance à tous les contributeurs

    A+++++++ je reviendrai

  6. #6
    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
    il faudrait faire ces opérations dans un thread, pour ne pas bloquer le GUI : dans la faq C++/CLI http://dotnet.developpez.com/faq/cpp...trolFromThread
    et si y a besoin de faire défiler la textbox, pareil, dans la faq C++/CLI http://dotnet.developpez.com/faq/cpp...Box#carettoend

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut
    Bonsoir et merci a toi, nico-pyright.

    Les threads sont un gros morceau pour moi... aussi avant de m'y atteler faut que je prenne des vacances bien méritées.
    Oui sérieusement, je vais laisser le dévelopement pour quelques jours au profit de vacances en altitude , tout prés de la nature....

    Encore grand merci a toi
    Et A+++++++;

Discussions similaires

  1. [WS 2008 R2] Appliquer une GPO sur les lecteurs réseaux des PC
    Par noukimibrice dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 13/12/2013, 18h47
  2. une question : sur les lecteurs swf de mp3
    Par ak4774 dans le forum Flash/Flex
    Réponses: 3
    Dernier message: 09/04/2009, 18h39
  3. Un soucis sur les placement des pages et la methode
    Par amine_en_france dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 10/07/2007, 16h51
  4. dataTable et methode sur les items
    Par mereyj dans le forum JSF
    Réponses: 2
    Dernier message: 27/03/2007, 10h08
  5. Réponses: 2
    Dernier message: 20/10/2006, 15h07

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