Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Système > Lecteurs
        Comment savoir si une disquette est présente dans le lecteur ?
        Comment connaître la taille d'un lecteur ?
        Comment connaître l'espace mémoire total sur un lecteur ?
        Comment connaître l'espace mémoire libre sur un lecteur ?
        Comment ouvrir et/ou fermer le tiroir CD ?
        Comment déterminer le type d'un lecteur ?
        Comment lire le nom de volume et le numéro de série d'un disque ?



Comment savoir si une disquette est présente dans le lecteur ?
Créé le 01/09/2004[haut]
auteurs : Geronimo, Ricky81
La fonction DiskSize permet de connaître la taille d'un lecteur. Elle prend en paramètre un entier qui correspond au lecteur à examiner : 1 pour A:, 2 pour B:, et ainsi de suite.
Si la fonction échoue, elle renvoie la valeur -1, permettant ainsi de savoir que le lecteur est vide.
Néanmoins, une erreur Windows est également affichée dans ce cas. Pour ne pas avoir l'affichage de cette erreur, nous utilisons la fonction SetErrorMode.

UINT oldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);

if (DiskSize(1) > -1)
{
   ShowMessage("Une disquette est dans le lecteur");
}
else
{
   ShowMessage("Aucune disquette n'est dans le lecteur");
}

SetErrorMode(oldErrorMode); // on restitue l'ancienne valeur

Comment connaître la taille d'un lecteur ?
Créé le 01/09/2004[haut]
auteur : Ricky81
La fonction DiskSize permet de connaître la taille d'un lecteur. Elle prend en paramètre un entier qui correspond au lecteur à examiner : 1 pour A:, 2 pour B:, et ainsi de suite.

__int64 taille = DiskSize(3);
Ce code renvoie la taille, en octets, du lecteur C:.


Comment connaître l'espace mémoire total sur un lecteur ?
Créé le 06/12/2006[haut]
auteur : Freeze
La fonction DiskSize permet de connaître la taille d'un lecteur. Elle prend en paramètre un entier qui correspond au lecteur à examiner : 1 pour A:, 2 pour B:, et ainsi de suite.

__int64 espaceTotal = DiskSize(3);
Ce code renvoie l'espace mémoire du lecteur C:, en octets.


Comment connaître l'espace mémoire libre sur un lecteur ?
Créé le 01/09/2004[haut]
auteur : Ricky81
La fonction DiskFree permet de connaître la taille d'un lecteur. Elle prend en paramètre un entier qui correspond au lecteur à examiner : 1 pour A:, 2 pour B:, et ainsi de suite.

__int64 espaceLibre = DiskFree(3);
Ce code renvoie l'espace mémoire du lecteur C:, en octets, pouvant encore être utilisé.


Comment ouvrir et/ou fermer le tiroir CD ?
Créé le 01/09/2004[haut]
auteurs : Geronimo, TABZ
Utilisez pour cela la commande mciSendString (mmsystem.h).

Pour ouvrir :

mciSendString("Set cdaudio door open wait", 0, 0, 0);
Pour fermer :

mciSendString("Set cdaudio door closed wait", 0, 0, 0);
Dans le cas de plusieurs lecteurs, il vous faut initialiser le lecteur concerné avec la commande suivante :

mciSendString("open F:\ type cdaudio alias cdaudio"); // le lecteur est ici F
De la même façon, vous aurez à utiliser la commande suivante pour clôturer l'association :

mciSendString("close cdaudio", 0, 0, 0);
Tout ceci donne donc le code suivant pour ouvrir par exemple :

mciSendString("open F:\ type cdaudio alias cdaudio", 0, 0, 0);
mciSendString("Set cdaudio door open wait", 0, 0, 0);
mciSendString("close cdaudio", 0, 0, 0);

Comment déterminer le type d'un lecteur ?
Créé le 01/09/2004[haut]
auteur : TABZ
Il suffit d'utiliser la fonction GetDriveType, en créant par exemple la méthode suivante :


String TypeLecteur(String lecteur)
{
    int id = GetDriveType(lecteur.c_str());
    switch(id)
    {
        case 0 : return "Inconnu";
        case 1 : return "Inexistant";
        case DRIVE_REMOVABLE : return "Lecteur de disquette";
        case DRIVE_FIXED : return "Lecteur de disque";
        case DRIVE_REMOTE : return "Lecteur distant";
        case DRIVE_CDROM : return "Lecteur de CD-ROM";
        case DRIVE_RAMDISK : return "Ramdisk";
    }
} 
Ainsi par exemple, TypeLecteur("C:\") retournera "Lecteur de disque".

lien : faq Comment lire le nom de volume et le numéro de série d'un disque ?

Comment lire le nom de volume et le numéro de série d'un disque ?
Mise à jour le 06/12/2006[haut]
auteurs : Nono40, Ricky81, Freeze, virtuA
La fonction suivante permet d'obtenir des informations sur un disque :

int GetVolumeInformationA(
const char * lpRootPathName,
char * lpVolumeNameBuffer,
unsigned long nVolumeNameSize,
unsigned long * lpVolumeSerialNumber,
unsigned long * lpMaximumComponentLength,
unsigned long * lpFileSystemFlags,
char * lpFileSystemNameBuffer,
unsigned long nFileSystemNameSize)
Il suffit de passer en paramètre le chemin vers la racine du disque ("C:\\"), afin d'obtenir les informations voulues. Au retour de la fonction :
  • lpVolumeNameBuffer va contenir le nom de volume
  • lpFileSystemNameBuffer va contenir le nom du système de fichiers
  • lpVolumeSerialNumber va contenir le numéro de série
  • lpMaximumComponentLength va contenir la longueur maximum d'un nom de fichier
  • lpFileSystemFlags va contenir la liste des états du disque

Exemple d'utilisation de la fonction :

void __fastcall TForm1::Button1Click(TObject *Sender)
{
const int Max_Length = 256;
char * VolName = new char[Max_Length];
char * FileSysName = new char[Max_Length];
unsigned long VolSerial;
unsigned long FileMaxLen;
unsigned long FileFlags;

if(GetVolumeInformationA("C:\\", VolName, Max_Length, &VolSerial, &FileMaxLen, &FileFlags, FileSysName, Max_Length))
{
AnsiString Message = "Nom du disque : " + AnsiString(VolName);
Message += "\nSystème de fichiers : " + AnsiString(FileSysName);
Message += "\nNuméro de série : " + FloatToStr(VolSerial);
ShowMessage(Message);
}

delete[] VolName;
delete[] FileSysName;
}
Une variante avec la fonction suivante :

BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,// adresse du volume
LPTSTR lpVolumeNameBuffer,// structure qui accueillera le nom du volume
DWORD nVolumeNameSize,// taille de la structure qui accueillera le nom du volume
LPDWORD lpVolumeSerialNumber,// structure qui accueillera le numéro de série du volume 
LPDWORD lpMaximumComponentLength,// structure qui accueillera la taille maximale d'un nom de fichier
LPDWORD lpFileSystemFlags,// structure qui accueillera des informations sur le système de fichiers
LPTSTR lpFileSystemNameBuffer,// structure qui accueillera le nom du système de fichiers 
DWORD nFileSystemNameSize // taille de la structure qui accueillera le nom du système de fichiers 
);
Exemple d'utilisation de cette fonction (n'oubliez pas d'inclure stdio.h) :

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString numserie;

char VolName[12],serial[15];
DWORD VolumeSerialNumber;
DWORD MaximumComponentLength;
DWORD FileSystemFlags;
char FileSystemName[5];
if (GetVolumeInformation("C:\\",
                        VolName,
                        sizeof(VolName),
                        &VolumeSerialNumber, 
                        &MaximumComponentLength,
                        &FileSystemFlags, 
                        FileSystemName,
                        sizeof(FileSystemName)))
{
sprintf(serial,"%X-%X",HIWORD(VolumeSerialNumber),LOWORD(VolumeSerialNumber));
numserie = serial;
AnsiString Message = "Nom du disque : " + AnsiString(VolName);
Message += "\nSystème de fichiers : " + AnsiString(FileSystemName);
Message += "\nNuméro de série : " + numserie;
ShowMessage(Message);
}
}
La seule différence à la restitution concerne le numéro de série qui ici est au format hexadécimal.

lien : faq Comment déterminer le type d'un lecteur ?


Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web