Espace libre, utilisé, capacité d'un disque et taille d'un dossier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 134 fois - Téléchargée 27 fois

Contenu du snippet

tout est dans le titre

Source / Exemple :


#include <stdio.h>	/* Bibliotheque d'entrees sorties (printf, ...)          */
#include <afx.h>	/* Bibliotheque de parcours de fichiers (FindFile, ...)  */

/* Affiche l'erreur rencontree */
// MSDN help : http://msdn.microsoft.com/library/en-us/debug/base/getlasterror.asp
void error(LPSTR lpszFunction) 
{ 
	DWORD dw = GetLastError(); 
	printf("Fonction : %s a rencontre une erreur : Num erreur %u\\n",lpszFunction, dw); 
	puts("\\n\\n\\nPour quitter pressez la touche entree...");
	getchar();
	ExitProcess(dw); 
}// fin fonction error

/* Retourne l espace disque total libre
retour sur 8 octets */
// MSDN help : http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespaceex.asp
unsigned _int64 DiskFreeSpaceAvailableTotal(char * pszRoot)
{
	ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;

	if(!GetDiskFreeSpaceEx(pszRoot, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes))
	{
		return 0;
	}
	else
	{
		return (unsigned _int64) liTotalFreeBytes.QuadPart;
	}// fin if
}// fin fonction DiskFreeSpaceAvailableTotal

/* Retourne l espace disque libre pour l'utilisateur courant
Si une gestion des quotas est mise en place cette taille sera différente de DiskFreeSpaceAvailableTotal
retour sur 8 octets */
// MSDN help : http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespaceex.asp
unsigned _int64 DiskFreeSpaceAvailable(char * pszRoot)
{
	ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;

	if(!GetDiskFreeSpaceEx(pszRoot, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes))
	{
		return 0;
	}
	else
	{
		return (unsigned _int64) liFreeBytesAvailable.QuadPart;
	}// fin if
}// fin fonction DiskFreeSpaceAvailable

/* Retourne la taille du total du disque
retour sur 8 octets */
// MSDN help : http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespaceex.asp
unsigned _int64 DiskSpaceTotal(char * pszRoot)
{
	ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;

	if(!GetDiskFreeSpaceEx(pszRoot, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes))
	{
		return 0;
	}
	else
	{
		return (unsigned _int64) liTotalBytes.QuadPart;
	}// fin if
}// fin fonction DiskSpaceTotal

/* Retourne la taille d'un dossier
retour sur 8 octets */
// MSDN help : http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_CFileFind.asp
unsigned _int64 GetFolderSize(char * pChemin)
{
	unsigned _int64 taille = 0, tailletmp = 0;
	BOOL bContinue ;
	CFileFind listefichiers;
	char sNouveauChemin[MAX_PATH];
	char sCheminATester[MAX_PATH];
	char sNomFichier[MAX_PATH];

	lstrcpy(sNouveauChemin, pChemin); 
	strcat(sNouveauChemin, "\\\\*.*");
	//printf("--> START : %s\\n", sNouveauChemin);
	
	// Lancement du parcours de fichiers
	bContinue = listefichiers.FindFile(_T(sNouveauChemin));
	if(!bContinue)
	{
		error("GetFolderSize");
		return -1;
	}// fin if
	
	// Boucle sur tous les dossier et fichiers
	while (bContinue)
	{
		bContinue = listefichiers.FindNextFile();

		lstrcpy(sNomFichier, listefichiers.GetFileName());
		// Si . ou .. ne rien faire
		if(listefichiers.IsDots())
		{
			continue;

		}
		// Si dossier parcours de son arborescence & recuperation de sa taille
		else if (listefichiers.IsDirectory())
		{
			lstrcpy(sCheminATester, listefichiers.GetFilePath()); 
			tailletmp = GetFolderSize(sCheminATester);	
			if(tailletmp == -1)
			{
				return -1;
			}
			else
			{
				taille += tailletmp;
			}// end if
		}
		// Ajout de la taille de chaque fichiers à la taille totale du dossier pere
		else
		{
			taille += (unsigned _int64) listefichiers.GetLength();
		}// fin if
	}// fin while
	// fermeture du parcours de fichiers
	listefichiers.Close();
	// Renvoie la taille totale du dossier
	return taille;
}// fin GetFolderSize

void main(int argc, char *argv[])
{
	char * pPath[1] = {""};

	printf("#################################################\\n");
	printf("########## FONCTION INFO ESPACE DISQUE ##########\\n");
	printf("#################################################\\n\\n");
	
	// Test des arguments d'entrée
	if(argc == 1)
	{
		printf("Pas d'arguments, test du disque courant.\\n\\n");
		pPath[0] = NULL;
	}
	else if(argc == 2)
	{
		printf("arguments = %s.\\n",		argv[1]);
		pPath[0] = argv[1];
	}
	else
	{
		printf("Nombres d'arguments invalides.\\n");
		return;
	}// fin if

	// Test des fonctions
	printf("Lecteur de test = ''%s''.\\n",		pPath[0]);
	printf("\\nCapacite : %I64d octets.\\n",		DiskSpaceTotal(pPath[0]));
	printf("Espace libre : %I64d octets.\\n",	DiskFreeSpaceAvailable(pPath[0]));
	printf("Espace utilise : %I64d octets.\\n",	DiskSpaceTotal(pPath[0]) - DiskFreeSpaceAvailable(pPath[0]));
	if(pPath[0])
	{
		printf("Taille : %I64d octets.\\n",			GetFolderSize(pPath[0]));
	}// fin if

	/* Pause */
	puts("\\n\\n\\nPour quitter pressez la touche entree...");
	getchar();
}// fin fonction main

A voir également

Ajouter un commentaire Commentaires
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
au risque de paraitre idio, est ce que ce programme trounerai sur mon pc tjrs en 32 bits ? car je voi des _int64 , des ULARGE ,...
Messages postés
5
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 mars 2006

c'est quoi la biblio ""
mes compilateurs ne trouvent pas
est ce que c'est exportable sous linux (c'est quoi le compilateur)
merci pour les reponces
Messages postés
4
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mars 2006

Je vais tester
si ca ne marche pas alors c'est un probeme
---MS
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
oh bob....

il est très bien ce code....
d'ailleur sans note => j'y remédie....

++
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
je pense que tu aurrais pu mettre un zip parce que a voir le code comme ca, ca donne la migraine...

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.