por Cesar Cassiano Schimanco

Directory.GetFiles - Filtrar múltiplas extensões com C#

Em C#, o Directory.GetFiles é utilizado para listar todos os arquivos de um diretório e de seus subdiretórios ao utilizar o parâmetro SearchOption.AllDirectories.
Além disso, ele também é utilizado para pesquisar arquivos em diretórios. Um exemplo seria pegar todas as imagens dentro de um diretório, ou então todas as imagens .jpg.
Abaixo vamos ver exemplos de utilização do Directory.GetFiles com C#.
 

Retornar todos os arquivos de um diretório:

string[] arquivos = Directory.GetFiles(@"C:\website");

 

Retornar todos os arquivos de um diretório e seus subdiretórios:

string[] arquivos = Directory.GetFiles(@"C:\website", "*", SearchOption.AllDirectories);

 

Retornar apenas arquivos .txt (filtrar arquivos por extensão específica)

string[] arquivos = Directory.GetFiles(@"C:\website", "*.txt");

 

Pesquisar arquivos por nome em C#

//Primeiro parâmetro é o diretório e segundo o nome do arquivo a ser pesquisado
//*test* = vai conter test
//*test = termina com test
//test* = inicia com test
string[] arquivos = Directory.GetFiles(@"C:\website", "*test*");

 

Até aqui nenhum problema, conseguimos retornar todos os arquivos de um diretório e fazer filtro por uma extensão específica (.txt). Mas como fazer filtro por múltiplas extensões utilizando o Directory.GetFiles?
Como retornar todas as imagens PNG e JPG de um diretório?
A primeira tentativa seria algo como "*.png|*.jpg|" ou "*.png,*.jpg" no lugar de "*.txt" (no último exemplo), mas isso não funciona com o GetFiles do Directory.

Abaixo está o exemplo de como fazer uma busca por extensões de arquivos específicos com o Directory.GetFiles do C#.

Pegar todos os arquivos PNG, JPG e JPEG em uma pasta

//Retornar um array de arquivos com várias extensões
//Directory.GetFiles(caminho, todos os arquivos, pesquisa em subdiretórios)
string[] arquivos = Directory.GetFiles(@"C:\website", "*.*", SearchOption.AllDirectories)
    //Where(arquivos que terminam com .png, .jpg ou .jpeg)
    //StringComparison.OrdinalIgnoreCase ignorar letras maiúsculas e minúsculas
            .Where(s => s.EndsWith(".png", StringComparison.OrdinalIgnoreCase)
            || s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)
            || s.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase)).ToArray();

 

O exemplo acima trata letras maiúsculas e minúsculas, mas poderia ser somente assim:

//Retornar um array de arquivos com várias extensões
//Directory.GetFiles(caminho, todos os arquivos, pesquisa em subdiretórios)
string[] arquivos = Directory.GetFiles(@"C:\website", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".png") 
                || s.EndsWith(".jpg") 
                || s.EndsWith(".jpeg")).ToArray();

 

Retornar todos os arquivos em uma lista de string

//Retornar uma lista de arquivos com várias extensões
//Directory.GetFiles(caminho, todos os arquivos, pesquisa em subdiretórios)
List<string> arquivos = Directory.GetFiles(@"C:\website", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".png") 
                || s.EndsWith(".jpg") 
                || s.EndsWith(".jpeg")).ToList();

 

Obs.: No .NET 4.0 o método GetFiles pode ser substituído por EnumerateFiles para evitar problemas com memória.


Resumo:
Neste artigo vimos exemplos de como listar todos os arquivos de um diretório e de seus subdiretórios. Vimos também como pesquisar arquivos em diretórios por extensão, por múltiplas extensões e pesquisar pelo nome do arquivo.

Comentários

Carregando comentários

Postar um novo comentário



Processando...