Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre actif
    Homme Profil pro Sébastien
    Développeur informatique
    Inscrit en
    août 2003
    Messages
    316
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2003
    Messages : 316
    Points : 192
    Points
    192

    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 Confirmé
    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    1 790
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 790
    Points : 3 735
    Points
    3 735

    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.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

  3. #3
    Membre actif
    Homme Profil pro Sébastien
    Développeur informatique
    Inscrit en
    août 2003
    Messages
    316
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2003
    Messages : 316
    Points : 192
    Points
    192

    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++ :
    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
    Expert Confirmé
    Avatar de Klaim
    Homme Profil pro Joel Lamotte
    Développeur de jeux vidéo
    Inscrit en
    août 2004
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Nom : Homme Joel Lamotte
    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 718
    Points : 3 026
    Points
    3 026

    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
    Membre actif
    Homme Profil pro Sébastien
    Développeur informatique
    Inscrit en
    août 2003
    Messages
    316
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2003
    Messages : 316
    Points : 192
    Points
    192

    Par défaut

    Dans ce cas sous linux, comment savoir si un média est amovible ?

  6. #6
    Expert Confirmé
    Avatar de Klaim
    Homme Profil pro Joel Lamotte
    Développeur de jeux vidéo
    Inscrit en
    août 2004
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Nom : Homme Joel Lamotte
    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 718
    Points : 3 026
    Points
    3 026

    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •