Gestion espace libre disque dur en c [devc++]

Contenu du snippet

Programme simple qui affiche la taille, l'espace utilise et l'espace libre d'un disque dur . Application de GetDiskFreeSpace et de la biblio windows.h
version allegee du prog de zorque
http://www.cppfrance.com/article.aspx?ID=361

le calcul de espace_libre et espace_total sont equivalent sauf que le 2eme evite un depassement de capacite (gros disque) pour la variable de type UNSIGNED LONG (0 à 4.294.967.295 c'est bien mais pas assez) ce qui evite d'afficher de faux resultat !
si vous connaisser un type de variable offrant + de place je suis preneur !!

Source / Exemple :


/******************************************************************************/
/*                              FREEDISKSPACE                                 */
/******************************************************************************/
/* Auteur: Ironnyc / Email: Ironnyc@hotmail.com                               */
/* Description     / Recupere les infos sur la taille d'un disque dur         */
/*                 / Capacite du disque dur ,espace libre etc...              */
/* ATTENTION       / pour de gros disque : dans le calcul de espace_total la  */
/*                 / taille total des cluster multiplier par les secteurs et  */
/*                 / encore multiplier par les bytes par secteur donne un     */
/*                 / resultat depassant la capacite de stockage d'un          */   
/*                 / UNSIGNED LONG bref le calcul reste identique a celui de  */
/*                 / espace_libre                                             */ 
/******************************************************************************/  

#include <stdio.h> /* bibliotheque d'entree sortie (printf...)*/
#include <windows.h>    /* GetDiskFreeSpace */

void main()  
{
/* Declaration des variables */
char lecteur[5] = "c:\\";       /* lettre du lecteur a scanner */

unsigned long Secteurs_Par_Cluster, Bytes_Par_Secteurs, Cluster_libre, Total_Cluster; /* stockage des infos */
unsigned long espace_libre, espace_utilise, espace_total;   /* permettra de traiter les infos */

GetDiskFreeSpace(lecteur,&Secteurs_Par_Cluster,&Bytes_Par_Secteurs,&Cluster_libre,&Total_Cluster);

espace_libre = ((Cluster_libre * Secteurs_Par_Cluster * Bytes_Par_Secteurs)/1024)/1024;
espace_total = (((Total_Cluster * Secteurs_Par_Cluster)/1024)*Bytes_Par_Secteurs)/1024;
espace_utilise = espace_total - espace_libre;

/* Affichage des resultats */
printf("lecteur= %c:\\\n",lecteur[0]);
printf("Secteur par cluster= %ld\n",Secteurs_Par_Cluster);
printf("Bytes par secteurs= %ld\n",Bytes_Par_Secteurs);
printf("Cluster libres= %ld\n",Cluster_libre);
printf("Nombre total de cluster= %ld\n",Total_Cluster);
printf("\nCapacite du lecteur : %ld Mo",espace_total);
printf("\nEspace utiliser : %ld Mo",espace_utilise);
printf("\nEspace libre : %ld Mo\n",espace_libre);

/* Pause */
puts("Pour continuer pressez une touche...");
    getchar();
}

Conclusion :


Bonne prog !!

A voir également

Du même auteur (ironnyc)