en utilisant le journal pour résoudre le problème ....
static String BytesToString(long byteCount)
{
string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; //Longs run out around EB
if (byteCount == 0)
return "0" + suf[0];
long bytes = Math.Abs(byteCount);
int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)));
double num = Math.Round(bytes/Math.Pow(1024, place), 1);
return (Math.Sign(byteCount) * num).ToString() + suf[place];
}
également en C#, mais devrait être un clin d'oeil à convertir. Aussi j'ai arrondi à 1 décimale pour la lisibilité.
Fondamentalement, déterminez le nombre de décimales dans la base 1024, puis divisez par 1024^décimales.
Et quelques exemples d'utilisation et de la production:
Console.WriteLine(BytesToString(9223372036854775807)); //Results in 8EB
Console.WriteLine(BytesToString(0)); //Results in 0B
Console.WriteLine(BytesToString(1024)); //Results in 1KB
Console.WriteLine(BytesToString(2000000)); //Results in 1.9MB
Console.WriteLine(BytesToString(-9023372036854775807)); //Results in -7.8EB
Edit: a fait remarquer que j'ai manqué un Math.floor, donc je l'intégra. (Convert.ToInt32 utilise l'arrondi, pas tronqué et c'est pourquoi Floor est nécessaire.) Merci pour la capture.
Edit2: Il y avait quelques commentaires sur les tailles négatives et les tailles de 0 octets, donc j'ai mis à jour pour gérer ces 2 cas.
Qu'est-ce à propos http://stackoverflow.com/questions/128618/c-file-size -format-fournisseur? – Kiquenet
Et http://stackoverflow.com/questions/14488796/does-net-provide-an-easy-way-convert-bytes-to-kb-mb-gb-etc .... – vapcguy