2009-02-03 1 views
0

J'ai une liste avec 4 colonnes - nom, extension, taille et emplacement. J'ai une méthode qui prend la taille de fichier en octets et convertit en KB, MB, GB, etc. selon les besoins. Un exemple de sortie serait un fichier de 1024 octets qui est imprimé en "1KB". Cette valeur est ensuite placée dans la liste.Comment trier un listview par taille de fichier?

Ce que je dois faire est de trier intelligemment la colonne de taille. À l'heure actuelle, le tri n'est qu'une simple comparaison, donc 1025 Ko est supérieur à 1024 Mo. Comment puis-je le faire "taille conscient"?

Mon code actuel de tri est de ce KB article: http://support.microsoft.com/kb/319401 Et voici mon code qui génère le texte de la taille du fichier:

 public static string getDynamicFileSize(string fileName) 
    { 
     FileInfo fi = new FileInfo(fileName); 
     long sizeInBytes = fi.Length; 
     if (sizeInBytes >= 1073741824) 
     { 
      double sizeInGB = sizeInBytes/Math.Pow(1024, 3); 
      return Math.Round(sizeInGB, 2) + " GB"; 
     } 

     if (sizeInBytes >= 1048576) 
     { 
      double sizeInMB = sizeInBytes/Math.Pow(1024, 2); 
      return Math.Round(sizeInMB, 2) + " MB"; 
     } 

     if (sizeInBytes >= 1024) 
     { 
      double sizeInKB = sizeInBytes/Math.Pow(1024,1); 
      return Math.Round(sizeInKB, 2) + " KB"; 
     } 

     //No conversion needed 
     return sizeInBytes + " bytes"; 
    } 

Merci.

Répondre

1

La plupart des objets dans .NET ont un membre Tag. C'est un endroit où vous pouvez ajouter tout ce dont vous avez besoin. Dans votre cas, je placerais la taille de fichier en octets dans la propriété ListViewSubItem.Tag. Ensuite, votre algorithme de tri peut utiliser cela pour trier par à la place du texte de la colonne.

+0

travaillé comme un charme, merci. –