begin process at 2012 05 27 16:39:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > GESTION ESPACE LIBRE DISQUE DUR EN C [DEVC++]

GESTION ESPACE LIBRE DISQUE DUR EN C [DEVC++]


 Information sur la source

Note :
Aucune note
Catégorie :Système Niveau :Débutant Date de création :25/06/2003 Date de mise à jour :25/06/2003 21:53:22 Vu :8 622

Auteur : ironnyc

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

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=36 1

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

  • /******************************************************************************/
  • /* 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();
  • }
/******************************************************************************/
/*                              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 !!


 Sources de la même categorie

Source avec Zip Source avec une capture INFORMATION PROCESSEUR (CPUID) par Devils_Tiger
Source avec Zip Source avec une capture LECTURE TEMPÉRATURE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture LECTURE FRÉQUENCE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10

Commentaires et avis

Commentaire de BruNews le 25/06/2003 22:08:35 administrateur CS


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;
}

Commentaire de D1m3x le 06/07/2003 13:28:13

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]

Commentaire de cr0wn le 29/07/2003 05:55:49

c nikel, et c pas trop compliqué avec l'windows.h, m'ci pour ta src

Commentaire de StevenJLMunn le 09/06/2004 14:01:13

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.

Commentaire de StevenJLMunn le 09/06/2004 14:08:36

Espace utilisé!!!!!!!!!!!Et ca fait 3 ans ke j'suis en france!!!!!!!!!!!!!!!!!!
Je sais ke dos reconais pas "é" mais mets au moins "e".

Commentaire de victorcoasne le 22/03/2005 17:53:13

Je trouve que c'est une belle programmation parce qu'elle est simple à comprendre !


Bravo !

Commentaire de victorcoasne le 22/03/2005 22:11:57

error: `main' must return `int'

donc int main()

Commentaire de victorcoasne le 01/03/2006 19:39:31

BruNews >
unsigned _int64 DiskFullSpace(char* pszRoot)
{ // pour les grands disks
  ULARGE_INTEGER liFreeBytes, liTotalBytes, liTotalFreeBytes;
  if(!GetDiskFreeSpaceEx(pszRoot, &liFreeBytes, &liTotalBytes, &liTotalFreeBytes)) return 0;
  return (unsigned _int64) liTotalBytes.QuadPart;
}
J'ai apdapté ton code et il ne marche plus qu'est ce qui va pas ?

Commentaire de BruNews le 01/03/2006 19:56:53 administrateur CS

Ce code doit fonctionner sans problème, vérifie ce qui est dans pszRoot.

Commentaire de victorcoasne le 01/03/2006 21:38:53

J'ai mis la même valeur lors de mon test sur les 2 fonctions.

Commentaire de BruNews le 01/03/2006 21:46:46 administrateur CS

Affiche l'erreur avec FormatMesage().

Commentaire de victorcoasne le 01/03/2006 22:32:21

Je croie avoir trouvé d'où venait l'erreur c'est le sprintf qui même avec un %ld veut pas afficher même si je le réduit en float en divisant par (1024*1024*1024)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales