FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez


SommaireSystèmeLecteurs (7)
précédent sommaire suivant
 

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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
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

Mis à jour le 1er septembre 2004 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.

Code c++ : Sélectionner tout
__int64 taille = DiskSize(3);
Ce code renvoie la taille, en octets, du lecteur C:.

Mis à jour le 1er septembre 2004 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.

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

Mis à jour le 6 décembre 2006 Freeze

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.

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

Mis à jour le 1er septembre 2004 Ricky81

Utilisez pour cela la commande mciSendString (mmsystem.h).

Pour ouvrir :

Code c++ : Sélectionner tout
mciSendString("Set cdaudio door open wait", 0, 0, 0);
Pour fermer :

Code c++ : Sélectionner tout
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 :

Code c++ : Sélectionner tout
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 :

Code c++ : Sélectionner tout
mciSendString("close cdaudio", 0, 0, 0);
Tout ceci donne donc le code suivant pour ouvrir par exemple :

Code c++ : Sélectionner tout
1
2
3
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);

Mis à jour le 1er septembre 2004 Geronimo TABZ

Il suffit d'utiliser la fonction GetDriveType, en créant par exemple la méthode suivante :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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".

Mis à jour le 1er septembre 2004 TABZ

La fonction suivante permet d'obtenir des informations sur un disque :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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) :

Code c++ : Sélectionner tout
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
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.

Mis à jour le 31 janvier 2005 Freeze Nono40 Ricky81 Virtua

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2020 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.