Qual é a sintaxe para definir várias extensões de arquivo como searchPattern
ativadas Directory.GetFiles()
? Por exemplo, filtrando arquivos com extensões .aspx e .ascx .
// TODO: Set the string 'searchPattern' to only get files with
// the extension '.aspx' and '.ascx'.
var filteredFiles = Directory.GetFiles(path, searchPattern);
Atualização : O LINQ não é uma opção , ele deve ser searchPattern
transferido GetFiles
, conforme especificado na pergunta.
c#
.net
system.io.directory
Seb Nilsson
fonte
fonte
Respostas:
Eu acredito que não há solução "pronta para uso", essa é uma limitação do método Directory.GetFiles.
É bastante fácil escrever seu próprio método, aqui está um exemplo .
O código pode ser:
fonte
Edit 23-07-2014
Você pode fazer isso no .NET 4.5 para uma enumeração mais rápida:
Directory.EnumerateFiles no MSDN
fonte
GetFiles
retornastring[]
.Directory.EnumerateFiles
para um aumento de performance ... stackoverflow.com/questions/5669617/...file.EndsWith("...", StringComparison.InvariantCultureIgnoreCase);
em vez deToLower
GetFiles pode corresponder apenas a um único padrão, mas você pode usar o Linq para chamar GetFiles com vários padrões:
Consulte a seção de comentários aqui: http://www.codeproject.com/KB/aspnet/NET_DirectoryInfo.aspx
fonte
new string[]{"*.txt","filename.*"}
,. No entanto, a chamada paraDistinct
realmente não resolve esse problema, pois os objetos FileInfo são comparados usando a igualdade de referência, e não a semântica. Pode ser corrigido removendoDistinct
ou passando umIEqualityComparer<FileInfo>
. Editado para fazer o primeiro.SelectMany
iterará sobre a mesma estrutura de arquivos novamente (e novamente), para que possa ficar abaixo do ideal em termos de desempenho.Eu gosto desse método, porque é legível e evita várias iterações do diretório:
fonte
HashSet<string>
Temo que você tenha que fazer algo assim, eu mudei o regex daqui .
fonte
Directory.EnumerateFiles
para aumentar o desempenho ( qual é a diferença entre Directory.EnumerateFiles vs Directory.GetFiles? )Ou pode ser mais rápido dividir e mesclar seus globs (pelo menos parece mais limpo):
fonte
A solução fácil de lembrar, preguiçosa e talvez imperfeita:
fonte
Eu usaria o seguinte:
EDIT: corrigida devido incompatibilidade entre Directory e DirectoryInfo
fonte
Uma maneira mais eficiente de obter arquivos com as extensões ".aspx" e ".ascx" que evita consultar o sistema de arquivos várias vezes e evita o retorno de muitos arquivos indesejados é pré-filtrar os arquivos usando um padrão aproximado de pesquisa e para refinar o resultado posteriormente:
fonte
Eu tentaria especificar algo como
deve funcionar.
fonte
fonte
fonte
Em vez da função EndsWith, eu escolheria usar o
Path.GetExtension()
método. Aqui está o exemplo completo:ou:
(Use
StringComparison.OrdinalIgnoreCase
se você se preocupa com o desempenho: comparações de strings do MSDN )fonte
parecido com esta demonstração:
fonte
Path.GetExtension
que você pode usar.@ Daniel B, obrigado pela sugestão de escrever minha própria versão dessa função. Ele tem o mesmo comportamento do Directory.GetFiles, mas oferece suporte à filtragem de expressões regulares.
Achei útil, então pensei em compartilhar.
fonte
versão c # da resposta de @ qfactor77. Esta é a melhor maneira sem o LINQ.
agora retorne um
filePath
array de strings. No começo você precisaTambém é necessário adicionar referência a
Microsoft.VisualBasic
fonte
Eu fiz uma maneira simples de pesquisar quantas extensões forem necessárias e sem ToLower (), RegEx, foreach ...
Trabalhando no .Net Standard 2.0.
fonte
Você pode fazer assim
fonte
fonte
Só gostaria de dizer que se você usar em
FileIO.FileSystem.GetFiles
vez deDirectory.GetFiles
, permitirá uma variedade de curingas.Por exemplo:
fonte
FileIO
?