2009-06-29 6 views
2

je le code suivant:objets de mesure fileinfo.Length dans kbs

foreach (string p in dirs) 
     { 
      string path = p; 
      string lastAccessTime = File.GetLastAccessTime(path).ToString(); 
      bool DirFile = File.Exists(path); 
      FileInfo fInf = new FileInfo(path); 

      DateTime lastWriteTime = File.GetLastWriteTime(p); 
      dirFiles.Add(p + "|" + lastAccessTime.ToString() + "|" + DirFile.ToString() + "|" + lastWriteTime.ToString() + "|" + fInf.Length.ToString()); 


     } 

J'ai un fInf.Length.ToString() et je voudrais mesurer la production en termes de KBS. Des idées sur la façon d'accomplir cela? Par exemple, au lieu d'obtenir 2048 en tant que taille de fichier, j'aimerais obtenir 2Kb.

Merci à l'avance de l'aide

Répondre

17

Voici comment l'obtenir décomposé en giga-octets, méga-octets ou kilo-octets:

string sLen = fInf.Length.ToString(); 
if (fInf.Length >= (1 << 30)) 
    sLen = string.Format("{0}Gb", fInf.Length >> 30); 
else 
if (fInf.Length >= (1 << 20)) 
    sLen = string.Format("{0}Mb", fInf.Length >> 20); 
else 
if (fInf.Length >= (1 << 10)) 
    sLen = string.Format("{0}Kb", fInf.Length >> 10); 

sLen aura votre réponse. Vous pouvez envelopper dans une fonction et juste passer dans le Length, ou même l'objet FileInfo.

Si au lieu de kilooctets « réelles », vous vouliez en termes de 1000 octets, vous pouvez remplacer 1 << 10 et >> 10 avec 1000 et /1000 respectivement, et de même pour les autres en utilisant 1000000 et 1000000000.

+5

Je sais que ce est long après votre réponse, mais pourquoi ne pas simplement essayer «FileInfo.Length/1024;» pour obtenir des KB, puis continuer à diviser pour obtenir la mesure suivante? – Ortund

+0

@lavinio Pourriez-vous s'il vous plaît expliquer votre réponse .. –

7

Si vous voulez la longueur comme un (long) entier:

long lengthInK = fInf.Length/1024; 
string forDisplay = lengthInK.ToString("N0") + " KB"; // eg, "48,393 KB" 

Si vous voulez la longueur en virgule flottante:

float lengthInK = fInf.Length/1024f; 
string forDisplay = lengthInK.ToString("N2") + " KB"; // eg, "48,393.68 KB" 
3

Essayez ligne ci-dessous:

string sizeInKb = string.Format("{0} kb", fileInfo.Length/1024);