Se avete bisogno di recuperare l'elenco dei file contenuti in una directory ordinati, ad esempio, in base alla dimensione o alla data di creazione, e magari applicando più filtri (ad esempio: *.jpg e *.gif), utilizzate la classe DirectoryHelper qui esposta:

      public sealed class DirectoryHelper

      {

            ///

            /// Determina il tipo di ordinamento da eseguire

            ///

            public enum SortType

            {

                  MinToMax,

                  MaxToMin

            }

            ///

            /// Esegue l'ordinamento in base alla proprietà passata al costruttore

            ///

            private class FileCompare : IComparer 

            {

                  string _property = "FullName";             // ordinamento di default

                  SortType _sortType = SortType.MinToMax;      // tipo di ordinamento di default

 

                  #region Costruttori

                  ///

                  /// Costruttore di default

                  ///

                  public FileCompare() {}

                  ///

                  /// Imposta la proprietà da utilizzare per l'ordinamento

                  ///

                  ///

                  public FileCompare(string property):this()

                  {

                        _property = property;

                  }

                  ///

                  /// Imposta la proprietà e il tipo di ordinamento da eseguire

                  ///

                  ///

                  ///

                  public FileCompare(string property, SortType sortType):this(property)

                  {

                        _sortType = sortType;

                  }

                  #endregion

                 

                  ///

                  /// Esegue il confronto tra due oggetti

                  ///

                  ///

                  ///

                  ///

                  // Implementazione dell'interfaccia IComparer.Compare

                  int IComparer.Compare( Object x, Object y ) 

                  {

                        // Ricavo il tipo FileInfo

                        Type fi = typeof(FileInfo);

 

                        // Invoco dinamicamente la proprietà richiesta per

                        // l'ordinamento sui due oggetti da confrontare

                        object a = fi.InvokeMember(_property, BindingFlags.GetProperty, null, (FileInfo)x, null);

                        object b = fi.InvokeMember(_property, BindingFlags.GetProperty, null, (FileInfo)y, null);

 

                        // Eseguo il confronto in base al tipo di ordinamento scelto

                        if (_sortType==SortType.MinToMax)

                        {

                              return( (new CaseInsensitiveComparer()).Compare( a, b ) );

                        }

                        else

                        {

                              return( (new CaseInsensitiveComparer()).Compare( b, a ) );

                        }

                  }

            }

 

            ///

            /// Restituisce un elenco ordinato di file sulla base di filtri multipli.

            ///

            ///

            ///

            ///

            public static FileInfo[] GetFiles(string directory, string[] filters, string sortBy)

            {

                  // Istanzio l'oggetto Directory

                  DirectoryInfo dir = new DirectoryInfo(directory);

 

                  // Creo un array con i file risultato dei diversi filtri applicati

                  ArrayList al = new ArrayList();

                  foreach(string filter in filters) al.AddRange(dir.GetFiles(filter));

                 

                  // Eseguo l'ordinamento sulla base del parametro sortBy

                  al.Sort(new FileCompare(sortBy));

 

                  // Eseguo l'unboxing dell'array nel tipo FileInfo

                  return (FileInfo[])al.ToArray(typeof(FileInfo));

            }

      }

 

utilizzabile così:

string[] filters = {"*.jpg", "*.jpeg", "*.gif"};
FileInfo[] files = DirectoryHelper.GetFiles(sPath, filters, "FullName");

ovviamente il codice può essere migliorato (purtroppo DirectoryInfo è sealed)...ma è un buon inizio!!!

bye