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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 926 fois - Téléchargée 33 fois

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

Ajouter un commentaire Commentaires
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 17
25 juin 2003 à 22:08
unsigned _int64 DiskFreeSpace(char* pszRoot)
{ // pour les grands disks
ULARGE_INTEGER liFreeBytes, liTotalBytes, liTotalFreeBytes;
if(!GetDiskFreeSpaceEx(pszRoot, &liFreeBytes, &liTotalBytes, &liTotalFreeBytes)) return 0;
return (unsigned _int64) liTotalFreeBytes.QuadPart;
}
D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
6 juil. 2003 à 13:28
Slt,
Bien Bien et brunews a (DE NVO) raison =D lol
tu devrais plutot faire ds fonctions que de metre tout dans la fonction main, c plus bo je trouve, torai également pu utiliser une classe, ce qui serait bcp plus bo, mais c'ets pas mal tt de mm :)
ciao

[D|`m`3X]
cr0wn Messages postés 7 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 29 juillet 2003
29 juil. 2003 à 05:55
c nikel, et c pas trop compliqué avec l'windows.h, m'ci pour ta src
StevenJLMunn Messages postés 36 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 11 septembre 2005
9 juin 2004 à 14:01
Excusé moi je suis débutant mais dans mon livre il n'y absolument rien de plus grand que unsigned long pour les vaiables sans virgule.
StevenJLMunn Messages postés 36 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 11 septembre 2005
9 juin 2004 à 14:08
Espace utilisé!!!!!!!!!!!Et ca fait 3 ans ke j'suis en france!!!!!!!!!!!!!!!!!!
Je sais ke dos reconais pas "é" mais mets au moins "e".

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (ironnyc)