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;
}