316 votes

Comment puis-je obtenir une taille de fichier lisible par l'homme en abréviations octets en utilisant .NET?

Comment puis-je obtenir une taille de fichier lisible par l'homme en abréviations octets en utilisant .NET?

Exemple : prendre l'entrée 7 326 629 et afficher 6,98 Mo

399voto

David Thibault Points 4090

Ce n’est pas le moyen le plus efficace de le faire, mais il est plus facile à lire si vous n’êtes pas familier avec fonctions mathématiques journal et qu’il devriez être assez rapide pour la plupart des scénarios.

353voto

deepee1 Points 4449

à l'aide de Journaux 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];
}

Aussi en c#, mais il devrait être un composant logiciel enfichable pour convertir. Aussi j'ai arrondi à 1 chiffre après la virgule pour des raisons de lisibilité.

Fondamentalement, Déterminer le nombre de décimales dans la Base de 1024 puis diviser par 1024^decimalplaces.

Et quelques exemples de l'utilisation et de sortie:

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 été souligné que j'ai manqué de maths.au sol, donc je l'ai insérée. (Convertir.ToInt32 utilise les arrondis, de ne pas tronquer et c'est pourquoi le Sol est nécessaire.) Merci pour l'attraper.

Edit2: Il y avait un couple de commentaires négatifs et de tailles de 0 octet tailles, j'ai donc mis à jour pour gérer ces 2 cas.

123voto

humbads Points 649

Une version testée et grandement optimisée de la fonction requise est affichée ici :

Taille du fichier lisible par l’homme c# - fonction optimisée

Code source :

73voto

Bob Points 34449
<pre><code></code><p><a href="http://www.pinvoke.net/default.aspx/shlwapi/StrFormatByteSize.html">http://www.PInvoke.net/default.aspx/shlwapi/StrFormatByteSize.html</a></p></pre>

24voto

Constantin Points 12185

Une autre façon pour la peau, sans aucune forme de boucles et avec le soutien de taille négative (logique des choses comme les deltas de taille de fichier) :

Et voici la suite de tests :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X