Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Bibliothèques
Bibliothèques Forum d'entraide sur les bibliothèques C++ : installation, utilisation. Avant de poster : Cours sur les bibliothèques C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/02/2013, 23h00   #1
smarties
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 262
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 262
Points : 123
Points : 123
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
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 10h00   #2
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
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 220
Points : 2 596
Points : 2 596
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.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h30   #3
smarties
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 262
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 262
Points : 123
Points : 123
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;
}
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h33   #4
Klaim
Expert Confirmé
 
Avatar de Klaim
 
Homme Joel Lamotte
Développeur de jeux vidéo
Inscription : août 2004
Messages : 1 555
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 555
Points : 2 971
Points : 2 971
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.
Klaim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 18h04   #5
smarties
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 262
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 262
Points : 123
Points : 123
Dans ce cas sous linux, comment savoir si un média est amovible ?
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 22h42   #6
Klaim
Expert Confirmé
 
Avatar de Klaim
 
Homme Joel Lamotte
Développeur de jeux vidéo
Inscription : août 2004
Messages : 1 555
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 555
Points : 2 971
Points : 2 971
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.
Klaim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 15h12   #7
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h34.


 
 
 
 
Partenaires

Hébergement Web