Encontre um arquivo com uma determinada extensão na pasta

91

Dado um caminho de pasta (como C:\Random Folder), como posso encontrar um arquivo nela que contenha uma certa extensão, como txt? Presumo que terei que fazer uma pesquisa por *.txtno diretório, mas não tenho certeza de como devo iniciar essa pesquisa em primeiro lugar.

Dominic K
fonte

Respostas:

176

Observe a System.IO.Directoryclasse e o método estático GetFiles. Ele tem uma sobrecarga que aceita um caminho e um padrão de pesquisa. Exemplo:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");
Anthony Pegram
fonte
Obrigado! Todas as respostas foram boas, mas você respondeu primeiro, então ... sim :)
Dominic K
6
Isso não funciona se a extensão for algo como txt_. Estou tentando determinar se há algum arquivo * .exe em uma pasta e só tenho um arquivo * .exe_, mas a consulta o retorna, o que não é correto.
Adrian
E se eu quiser o arquivo único com o nomemacos.txt
Prashant Pimpale,
Quero encontrar todos os arquivos sem nenhuma extensão. Tenho alguns arquivos do tipo "arquivo" (sem extensão), como posso encontrar esses arquivos?
sohaiby de
31

Você pode usar a classe Directory

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
Sgriffinusa
fonte
3
Isso não funciona se a extensão for algo como txt_ ou qualquer outra coisa, conforme indicado na documentação msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx
Randall Flagg
14

É bem fácil, na verdade. Você pode usar a System.IO.Directoryclasse em conjunto com System.IO.Path. Algo como (usar LINQ torna tudo ainda mais fácil):

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p));

// Get all filenames that have a .txt extension, excluding the extension
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt")
                             .Select(fn => Path.GetFileNameWithoutExtension(fn));

Existem muitas variações desta técnica, é claro. Algumas das outras respostas são mais simples se o seu filtro for mais simples. Este tem a vantagem de enumeração atrasada (se isso importa) e filtragem mais flexível em detrimento de mais código.

Greg D
fonte
Obrigado por todo o trabalho extra que você colocou nisso. No entanto, estou optando por uma declaração simples, pois só tenho um arquivo de texto no diretório (foi extraído pelo meu programa).
Dominic K
3

O método abaixo retorna apenas os arquivos com determinada extensão (por exemplo: arquivo com .txt mas não .txt1)

public static IEnumerable<string> GetFilesByExtension(string directoryPath, string extension, SearchOption searchOption)
    {
        return
            Directory.EnumerateFiles(directoryPath, "*" + extension, searchOption)
                .Where(x => string.Equals(Path.GetExtension(x), extension, StringComparison.InvariantCultureIgnoreCase));
    }
Hazjack
fonte
1

Pelo meu entendimento, isso pode ser feito de duas maneiras:

1) Você pode usar a classe de diretório com o método Getfiles e percorrer todos os arquivos para verificar nossa extensão necessária.

Directory.GetFiles ("your_folder_path) [i] .Contains (" *. Txt ")

2) Você pode usar a classe Path com o método GetExtension que pega o caminho do arquivo como parâmetro e verifica a extensão. Para obter o caminho do arquivo, basta ter uma condição de loop que irá buscar um único arquivo e retornar o caminho do arquivo que pode ser usado para verificação.

Path.GetExtension (your_file_path) .Equals (". Json")

Nota: Ambas as lógicas devem estar dentro de uma condição de loop.

Pulkit Shah
fonte
-1

Use este código para ler o arquivo com todos os tipos de arquivos de extensão.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Vishal Prajapati
fonte