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

Bibliothèques C++ Discussion :

Lister les périphériques


Sujet :

Bibliothèques C++

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 264
    Points : 4 060
    Points
    4 060
    Par défaut Lister les périphériques
    Bonjour

    Je cherche une bibliothèque, de préférence multi-plateforme (Windows, Linux voir Mac), afin de lister les périphériques de stockage connectés (disque/partition, USB, "removable", téléphone via MTP). Je souhaite obtenir un UUID ainsi que la racine (D:\ ou /media/pendrive/).
    Existe-t-il une librairie faisant cela ?

    Merci d'avance

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ca va plus être une mise en œuvre d'une bibliothèque particulière.
    Jette un œil du côté de boost.filesystem, tu devrais y trouver quelque chose.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 264
    Points : 4 060
    Points
    4 060
    Par défaut
    J'ai réussi à obtenir mes informations pour Windows mais pour Linux, je ne vois pas comment détecter un média amovible

    Code C++ : 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
    #if defined(__WIN32) || defined(__WINNT)
    #include <windows.h> //http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx
    #endif
    typedef wchar_t TCHAR;
    #define _tcslen wcslen
    #ifdef __LINUX
    #include <blkid/blkid.h>
    #endif
     
    bool DeviceManager::isRemovable(QString path) {
    #if defined(__WIN32) || defined(__WINNT)
        QFileInfoList fil=QDir::drives();
        for(int i=0; i<fil.size(); i++)
            if(path.contains(fil.at(i).absoluteFilePath())) {
                UINT uDriveType = GetDriveType(fil.at(i).absoluteFilePath().replace("/","\\").toStdWString().c_str());
                if(uDriveType!=DRIVE_FIXED && uDriveType!=DRIVE_RAMDISK) return true;
            }
    #endif
        return false;
    }
     
    QString DeviceManager::getUuid(QString path) {
        QFileInfoList fil=QDir::drives();
        QString tmp="";
    #if defined(__WIN32) || defined(__WINNT)
        for(int i=0; i<fil.size(); i++)
            if(path.contains(fil.at(i).absoluteFilePath())) {
                wchar_t buf[50];
                GetVolumeNameForVolumeMountPoint(fil.at(i).absoluteFilePath().replace("/","\\").toStdWString().c_str(), buf, 50);
                tmp=QString::fromWCharArray(buf);
            }
    #endif
    #ifdef __LINUX
        QFile f("/proc/mounts");
        QRegExp rx("([\\S]+)[\s]+([\\S]+)[\s]+([\\S]+)[\s]+([\\S]+)[\s]+([\\S]+)[\s]+([\\S]+)");
        f.open(QIODevice::ReadOnly | QIODevice::Text);
        QTextStream ts(&f);
        while(!ts.atEnd()) {
            QString line=ts.readLine().trimmed();
            if(line.at(0)=="#") continue; //ignore comments
            if(rx.exactMatch(line)) {
                if(path.startsWith(rx.cap(2))) return blkid_evaluate_spec(rx.cap(2).toLocal8Bit().constData(), NULL);
            }
        }
        f.close();
    #endif
        return tmp;
    }

  4. #4
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par smarties Voir le message
    Bonjour

    Je cherche une bibliothèque, de préférence multi-plateforme (Windows, Linux voir Mac), afin de lister les périphériques de stockage connectés (disque/partition, USB, "removable", téléphone via MTP). Je souhaite obtenir un UUID ainsi que la racine (D:\ ou /media/pendrive/).
    Existe-t-il une librairie faisant cela ?

    Merci d'avance
    Ca n'existe pas.

    boost.filesystem n'a a avoir qu'avec les systemes de fichiers, pas avec les "periferiques". En gros boost.filesystem va te permettre d'acceder aux periferiques seulement si ils ont une adresse dans le systeme de fichier en cours. Si ce n'est pas le cas (le disque n'est pas monte), tu dois forcement passer par les fonctions de l'OS.

    Si ils sont automatiquement accessible via le systeme de fichier, alors boost.filesystem marchera, mais tu peux oublier les UUID. Note que c'est le prototype de la bibliotheque standard d'acces au systeme de fichier pour la prochaine version de C++.

    Si tu veux n'importe quelle info specifique a un peripherique, il faut forcement passer par l'OS. L'exception est le driver graphique dont tu peux avoir des infos via OpenGL.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 264
    Points : 4 060
    Points
    4 060
    Par défaut
    Dans ce cas sous linux, comment savoir si un média est amovible ?

  6. #6
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par smarties Voir le message
    Dans ce cas sous linux, comment savoir si un média est amovible ?
    Aucune idee, je suis pas specialiste linux, vois avec des specialistes, ou cherche dans la doc C de linux, il me semble que tout doit y etre.

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par smarties Voir le message
    Dans ce cas sous linux, comment savoir si un média est amovible ?
    Il faut monitorer les évènement kernel - de la même manière que le fait udev. Tu peux pour cela utiliser libudev.

    Si ton système n'utilise pas udev (ça peut arriver) alors il y a de fortes chances qu'un système similaire soit utilisé (hotplug, mdev...). A toi de voir s'il existe une possibilité de communiquer avec ces systèmes. Au pire (et là, je parle en connaissance de cause), tu peux utiliser netlink pour t'interfacer avec le kernel lui-même et obtenir ces informations de première main.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Lister les périphériques sous Linux
    Par Elric27 dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 22/04/2015, 17h49
  2. Réponses: 2
    Dernier message: 13/03/2014, 20h07
  3. Comment lister les périphériques bluetooth à porté?
    Par xXO--Hades--OXx dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 11/02/2011, 10h56
  4. lister les périphériques installés dans un pc en c#
    Par imene_t1 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/09/2007, 11h55
  5. [TP]Lister les fichiers d'un répertoire
    Par nvtitan dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/06/2002, 11h22

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