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

C++ Discussion :

Obtenir l'espace libre d'un disque dur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Obtenir l'espace libre d'un disque dur
    Bonjour,

    Je travail en ce moment sur une application qui tourne sous Windows. Je programme en C++, j'utilise Qt et les API Windows. Mon soucis est le suivant :

    Je suis actuellement capable d'obtenir l'espace total/libre/occupé, de chacune des partitions existantes sur ma machine Le problème, c'est que je n'arrive pas à déterminer à quel disque dur appartiennent ces partitions. Et de ce fait, je n'arrive pas à déterminer non plus quel est l'espace disponible de mes disques dur.

    Comment puis-je obtenir l'espace libre de chaque partitions appartenant à un seul et même disque dur ?

    Pour informations, j'utilise dans mon programme les fonctions suivantes :
    IOCTL_DISK_GET_DRIVE_LAYOUT, PARTITIONS_INFORMATION et autre
    GetDiskFreeSpace

    Cordialement
    PKO

  2. #2
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Je sais pas si tu as vu mais il vaut mieux utiliser GetDiskFreeSpaceEx
    The GetDiskFreeSpace function cannot report volume sizes that are greater than 2 gigabytes (GB). To ensure that your application works with large capacity hard drives, use the GetDiskFreeSpaceEx function.
    Edit: tu as un exemple d'utilisation ici.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Twindruff > Bonjour. J'utilise effectivement cette fonction. Si elle est capable de me fournir diverses informations utiles concernant l'espace des mes partitions, je n'ai pas trouvé le moyen de l'utiliser pour lire l'espace disponible de mes disques durs. Ni pour déterminer si la partition analysée appartient à mon hdd1 ou hdd2 (dans le cas simple ou je ne posséderais que 2 hdd).

    MSDN indique pourtant : "If this parameter is NULL, the function uses the root of the current disk.", en parlant du premier argument. J'en déduis que je pourrais tout au mieux, obtenir les informations relatives à l'espace total/libre/occupé du hdd courant, mais pour les autres hdd, comment faire ?

    Cordialement,
    PKO

  4. #4
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Citation Envoyé par Twindruff Voir le message
    tu as un exemple d'utilisation ici.
    Tu as regardé le sample ?
    Ce code fonctionne bien:
    Code : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
       #include <windows.h>
       #include <stdio.h>
     
     
       void main (int argc, char **argv)
       {
          BOOL  fResult;
     
          char  *pszDrive  = NULL,
                 szDrive[4];
     
          unsigned __int64 i64FreeBytesToCaller,
                           i64TotalBytes,
                           i64FreeBytes;
     
          /*
             Command line parsing.
     
             If the drive is a drive letter and not a UNC path, append a 
             trailing backslash to the drive letter and colon.  This is 
             required on Windows 95 and 98.
          */ 
          if (argc != 2)
          {
             printf ("usage:  %s <drive|UNC path>\n", argv[0]);
             printf ("\texample:  %s C:\\\n", argv[0]);
             return;
          }
     
          pszDrive = argv[1];
     
          if (pszDrive[1] == ':')
          {
             szDrive[0] = pszDrive[0];
             szDrive[1] = ':';
             szDrive[2] = '\\';
             szDrive[3] = '\0';
     
             pszDrive = szDrive;
          }
     
     
         fResult = GetDiskFreeSpaceEx (pszDrive,
                                 (PULARGE_INTEGER)&i64FreeBytesToCaller,
                                 (PULARGE_INTEGER)&i64TotalBytes,
                                 (PULARGE_INTEGER)&i64FreeBytes);
         if (fResult)
         {
            printf ("\n\nGetDiskFreeSpaceEx reports\n\n");
            printf ("Available space to caller = %I64u MB\n",
                    i64FreeBytesToCaller / (1024*1024));
            printf ("Total space               = %I64u MB\n",
                    i64TotalBytes / (1024*1024));
            printf ("Free space on drive       = %I64u MB\n",
                    i64FreeBytes / (1024*1024));
         }
     
          if (!fResult)
             printf ("error: %lu:  could not get free space for \"%s\"\n",
                     GetLastError(), argv[1]);
       }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Twindruff > Bonjour. Oui, j'ai regardé l'exemple. Mais comme je l'ai dit, il ne permet que d'obtenir l'espace d'une partition (C:\ D:\). Et ce que je souhaite obtenir, c'est l'espace de mon disque dur physique.

    Je pourrais par exemple additionner les espaces des mes partitions à l'aide de la fonction "GetDiskFreeSpaceEx ". Mais cette fonction ne me permet pas de savoir si la partition C:\ appartient a mon disque dur physique 1, ou 2.
    Par exemple :

    [DISQUE DUR 1]

    - C:\ (20Go)
    - D:\ (130Go)

    [DISQUE DUR 2]
    - E:\ (50Go)
    - F:\ (130Go)
    La fonction que tu proposes me permettra de connaitre la taille de C D E et F. Mais comment savoir la taille de mon DISQUE DUR 1 et de mon DISQUE DUR 2 sachant que rien ne m'indique que C et D appartiennent a DISQUE DUR 1 et que E et F appartiennent à DISQUE DUR 2.

    Donc actuellement, je peut obtenir l'espace de mes partitions (C:\ D:\ ...) mais pas de mes disques dur (DISQUE DUR 1 et DISQUE DUR 2).

    Cordialement,
    PKO

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Existe t'il un moyen pour savoir a quelle HDD appartient une partition ?

    Cordialement,
    PKO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Obtenir l'espace libre d'un systeme de fichier
    Par sbrillard dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 13/11/2008, 10h46
  2. [Free Pascal] Connaître l'espace libre d'un disque (Windows/Linux)
    Par Merlin09 dans le forum Free Pascal
    Réponses: 2
    Dernier message: 03/02/2008, 22h33
  3. Espace Libre sur les disques
    Par SILO dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/07/2006, 11h23
  4. Réponses: 1
    Dernier message: 28/02/2006, 23h43
  5. Réponses: 2
    Dernier message: 15/06/2005, 18h01

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