Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 02/04/2006, à 05: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

Haut de page ↑