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 :

Lecteur externe non reconnu


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Points : 0
    Points
    0
    Par défaut Lecteur externe non reconnu
    Bonjour
    Je veux ouvrir un répertoire d'un disque dur externe Z sous Win7 en utilisant un logiciel écrit en C# sous Win7.
    Quand je compile et execute le code source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     private string nomlecteur()
            {
           return "Z:\\";      
     
            }        
    private void lecteurOmZzToolStripMenuItem_Click(object sender, EventArgs e)
     
            {
               System.Diagnostics.Process.Start(nomlecteur() +"Om\\Zz\\");
            }
    Le répertoire Zz s'ouvre bien
    Mais si je ferme le code source (visual studio 2010) et je fais tourner l'exécutable, alors un message d'erreur
    s'affiche "Le lecteur spécifié est introuvable"
    Pourquoi?
    D'autre part comment trouver le nom du seul disque dur externe car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
        private string nomlecteur()
            {        
        string s = "";   
     foreach (DriveInfo l in DriveInfo.GetDrives())       
      {      
          if (l.DriveType == DriveType.Removable) s = l.Name;       
     }       
     return s;  
            }
    ne marche pas. Il engrange la liste I,H,K...etc
    merci pour vos éventuelles réponses

  2. #2
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Bonsoir,

    Il est étonnant que le code marche sous Visual Studio mais pas lorsque vous le lancez directement.

    Est-ce que Visual Studio est lancé avec les droits administrateurs ?
    Est-ce que lorsque le programme est lancé directement, vous le faite avec le même utilisateur ? Et est-ce que l'utilisateur à le droit d'accéder au disque Z ?

    Concernant la liste des disques durs externe, il n'y a malheureusement pas d'info supplémentaires retournées par GetDrive. Filtrer par DriveType.Removable permet déjà de faire le tri parmi les lecteurs réseau, lecteurs CD / DVD, etc...

    Ensuite, les disques durs étant généralement de grande capacité comparé aux clés USB, il est peut-être possible de regarder la taille du disque pour déterminer s'il s'agit d'un disque dur externe ou pas (100Go me semble être une bonne valeur pour différencier clé usb et disque externe)

  3. #3
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Bonjour,

    Pour votre 1er problème, je ne le reproduit pas, cela fonctionne aussi bien en mode debug qu'à partir de l'exécutable généré.

    Pour votre deuxième problème, j'ai du réaliser plus ou moins le même travail car je ne devais sauver des photos que sur des périphériques USB (HDD ou Clés USB).

    Le problème est que le DriveInfo.DriveType renverra bien "Removable" pour une clé USB mais "Fixed" pour un HDD externe.

    Après quelques recherches je suis tombé sur un bout de code qui expliquait qu'il fallait passer par les WMI (Windows Management Instrumentation) que je ne connaissais pas et donc je suis encore un peu novice en la matière. Je suis toutefois parvenu à faire un petit programme qui affiche la liste des périphériques USB (HDD ou clés USB) connectés sur mon poste.

    Voici le code :

    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
     
    private void button1_Click(object sender, EventArgs e)
    {
       GetPeriphUsb();
     
       for(int i = 0; i < _lstDiskUsb.Count; i++)
       {
          DriveInfo drvInf = (DriveInfo)_lstDiskUsb.GetByIndex(i);
     
          switch (drvInf.DriveType)
          {
              case DriveType.Fixed:
                {
                    lstDiskUsb.Items.Add(drvInf.Name + "(HDD externe)");
                    break;
                 }
     
              case DriveType.Removable:
                {
                    lstDiskUsb.Items.Add(drvInf.Name + "( Clé USB)");
                    break;
                }
          }
       }
    }
     
    private void GetPeriphUsb()
    {
        _lstDiskUsb.Clear();
     
        foreach (ManagementObject drive in new ManagementObjectSearcher("select * from Win32_DiskDrive where InterfaceType='USB'").Get())
        {
           foreach (ManagementObject partition in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"] + "'} WHERE AssocClass =Win32_DiskDriveToDiskPartition").Get())
            {
                foreach (ManagementObject disk in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + partition["DeviceID"] + "'} WHERE AssocClass =Win32_LogicalDiskToPartition").Get())
                 {
                            DriveInfo drvInf = new DriveInfo(disk["Name"] + "\\");
     
                            _lstDiskUsb.Add(drvInf.Name, drvInf);
                 }
            }
        }
    }
    Il faut ajouter la référence à System.Management.dll au projet.

    En espérant avoir pu vous aider
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  4. #4
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Citation Envoyé par binou76 Voir le message
    Bonjour,
    Le problème est que le DriveInfo.DriveType renverra bien "Removable" pour une clé USB mais "Fixed" pour un HDD externe.
    La documentation officielle (http://msdn.microsoft.com/fr-fr/libr...drivetype.aspx) est quelque peu ambigu la dessus.

    Extrait :
    Removable: Le lecteur est un dispositif de stockage amovible, tel qu'un lecteur de disquette ou un lecteur flash USB.

    Fixed: Le lecteur est un disque fixe.

    Qualifier un disque dur externe comme fixe est donc un peu bizarre et devrait donc être documenté. Merci en tout cas pour cette précision

  5. #5
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par ElTotor Voir le message
    La documentation officielle (http://msdn.microsoft.com/fr-fr/libr...drivetype.aspx) est quelque peu ambigu la dessus.

    Extrait :
    Removable: Le lecteur est un dispositif de stockage amovible, tel qu'un lecteur de disquette ou un lecteur flash USB.

    Fixed: Le lecteur est un disque fixe.

    Qualifier un disque dur externe comme fixe est donc un peu bizarre et devrait donc être documenté. Merci en tout cas pour cette précision
    J'avais moi-même été étonné de la chose lorsque j'avais du le faire en VB6, et je m’aperçois que c'est toujours le cas en C# après avoir refait le test ce jour avec Visual Studio 10 sous Windows 8.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Points : 0
    Points
    0
    Par défaut Merci
    Merci Binou76

Discussions similaires

  1. Lecteur DVD non-reconnu
    Par Invité dans le forum Périphériques
    Réponses: 3
    Dernier message: 28/03/2008, 22h31
  2. Lecteur CDROM non reconnu
    Par domy38 dans le forum Windows XP
    Réponses: 4
    Dernier message: 21/08/2007, 15h28
  3. [materiel] disque dur sata externe non reconnu
    Par gregal dans le forum Composants
    Réponses: 2
    Dernier message: 13/03/2007, 14h50
  4. disque dur Externe non reconnu
    Par Go_Ahead dans le forum Windows XP
    Réponses: 15
    Dernier message: 15/01/2007, 13h33
  5. Disque dur externe non reconnu
    Par climz dans le forum Composants
    Réponses: 10
    Dernier message: 10/06/2006, 22h25

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