Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/04/2006, à 06:59

Renorems

Comment afficher un guint64 ?

Bonjour,

Je programme en ce moment un petit truc pour m'afficher la taille d'un répertoire.

Voici une partie du code :

void
AfficheTaille(guint64 N)
{
	if (N < 1024)
		printf("%lld o", (unsigned long long) N);
	else if (N < 1024 * 1024)
		printf("%lld ko", (unsigned long long) N / 1024);
	else if (N < 1024 * 1024 *1024)
		printf("%lld Mo", (unsigned long long) N / 1024 / 1024);
	else
		printf("%lld Go", (unsigned long long) N / 1024 / 1024 / 1024);
}

guint64
TailleFichierReg(gchar *Chemin)
{
	struct stat StatObj;
	stat(Chemin, &StatObj);
	return StatObj.st_size;
}

guint64
TailleRep(gchar *Chemin)
{
	DIR 		  *Rep;
	struct dirent *Obj;
	guint64       Taille = 0;
	
	Rep = opendir(Chemin);
	while ((Obj = readdir(Rep)) != NULL)
	{
		if (strcmp(Obj->d_name, ".") && strcmp(Obj->d_name, ".."))
		{
			gchar *CheminComplet = g_strconcat(Chemin, "/", Obj->d_name, NULL);
			if (EstUnRep(CheminComplet))
				Taille += TailleRep(CheminComplet);
			if (EstUnFichierReg(CheminComplet))
				Taille += TailleFichierReg(CheminComplet);
		}		
	}		
	closedir(Rep);
	//printf("%s, %lld octet(s)\n", Chemin, Taille);
	return Taille;
}


int main(int argc, char **argv)
{
	printf("%s : ", argv[1]);
	AfficheTaille(TailleRep(argv[1]));
	printf("\n");
	
	return EXIT_SUCCESS;
}

Mais j'ai un petit pb : j'ai l'impression que le programe me renvoie parfois des résultats bizarres (négatifs par exemple).

Est-ce que la méthode que j'ai utilisé est la plus propre ?
Sinon, comment faire ?

Hors ligne