Freeteo


Pensieri e C#dice di Matteo Raumer

Lista dei file su disco filtrando per piu' estensioni

Sara' dovuto al fatto che il famework rimappa giu' le varie api windows oppure non hanno ritenuto importante implementare una ricerca di file su disco specificando piu' tipologie di file, ma resta comunque il fatto che questa cosa non si puo' fare usando le classi del framework, bisogna implementarsela a mano.

Mi riferisco al metodo "GetFiles" della classe "System.IO.Directory" (o DirectoryInfo) che ha un bel overload dove è possibile specificare in stringa il filtro da mettere alla lista di file tornati (come stringa o come FileInfo).

Quindi via codice è possibile fare GetFIles("*.txt") MA NON GetFiles("*.txt;*.png...") e spesso la cosa è scomoda se si ha a che fare con applicazioni che gestiscono files.

Anche se manca poco male, è facilmente implementabile, basta decidere il carattere delimitatore e richiamare il metodo del framework piu' volte, aggiungendo il risultato alla stessa lista, per poi farsi tornare ovviamente quella lista.

Il codice è abbastanza semplice ma efficace e io lo uso oramai come "standard" dato che mi capita spesso di averne la necessita' :

public static List<string> GetFiles(string path, string filter)
{
 
List<string> lista = new List<string>();
  if (!string.IsNullOrEmpty(filter))
  {
   
foreach (string str in filter.Split(';'))
          lista.AddRange(
Directory.GetFiles(path,str));
  }
  else
   
lista = new List<string>(Directory.GetFiles(path));

 
return lista;
}

In questo il delimitatore è ";" e quindi la chiamata è :  Funzioni.GetFiles("c:\\","*.txt;*.png");
(Funzioni è il nome della mia classe statica per le funzioni a corredo della mia applicazione)



* ps: eventualmente è possibile fare lo stesso metodo con FileInfo e DirectoryInfo ed è  praticamente la stessa cosa:

public static List<FileInfo> GetFiles(string path, string filter)
{
  List<FileInfo> lista = new List<FileInfo>();
 
 DirectoryInfo dirInfo = new DirectoryInfo(path);
 
if (!string.IsNullOrEmpty(filter))
  {
    
foreach (string str in filter.Split(';'))
            lista.AddRange(dirInfo.GetFiles(str));
  }
  else
     lista = new List<FileInfo>(dirInfo.GetFiles());

  return
lista;
}

 

Categoria: Tips
domenica, 24 giu 2007 Ore. 17.10

Messaggi collegati






  • Views Home Page: 243.203
  • Views Posts: 420.644
  • Views Gallerie: 564.820
  • n° Posts: 163
  • n° Commenti: 148
Anno 2014

Anno 2013

Anno 2012

Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003