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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 880 fois - Téléchargée 29 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
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
24 juil. 2006 à 18:11
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 ,...
petit_loup77 Messages postés 5 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 mars 2006
6 mars 2006 à 11:24
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
cs_sabri007 Messages postés 4 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mars 2006
27 févr. 2006 à 17:10
Je vais tester
si ca ne marche pas alors c'est un probeme
---MS
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
23 sept. 2005 à 18:09
oh bob....

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

++
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
15 janv. 2004 à 21:17
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.