Directory.EnumerateFiles Método

Definição

Retorna uma coleção enumerável de nomes de arquivo completos que atendem aos critérios especificados.

Sobrecargas

Nome Description
EnumerateFiles(String, String, EnumerationOptions)

Retorna uma coleção enumerável de nomes de arquivo completos que correspondem a um padrão de pesquisa e opções de enumeração em um caminho especificado e, opcionalmente, pesquisa subdiretórios.

EnumerateFiles(String, String, SearchOption)

Retorna uma coleção enumerável de nomes de arquivo completos que correspondem a um padrão de pesquisa em um caminho especificado e, opcionalmente, pesquisa subdiretórios.

EnumerateFiles(String)

Retorna uma coleção enumerável de nomes de arquivo completos em um caminho especificado.

EnumerateFiles(String, String)

Retorna uma coleção enumerável de nomes de arquivo completos que correspondem a um padrão de pesquisa em um caminho especificado.

EnumerateFiles(String, String, EnumerationOptions)

Retorna uma coleção enumerável de nomes de arquivo completos que correspondem a um padrão de pesquisa e opções de enumeração em um caminho especificado e, opcionalmente, pesquisa subdiretórios.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member EnumerateFiles : string * string * System.IO.EnumerationOptions -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String, enumerationOptions As EnumerationOptions) As IEnumerable(Of String)

Parâmetros

path
String

O caminho relativo ou absoluto para o diretório a ser pesquisado. Essa cadeia de caracteres não diferencia maiúsculas de minúsculas.

searchPattern
String

A cadeia de caracteres de pesquisa a ser correspondida com os nomes dos arquivos em path. Esse parâmetro pode conter uma combinação de caracteres de caminho literal válido e curinga (* e ?), mas não dá suporte a expressões regulares.

enumerationOptions
EnumerationOptions

Um objeto que descreve a configuração de pesquisa e enumeração a ser usada.

Retornos

Uma coleção enumerável dos nomes completos (incluindo caminhos) para os arquivos no diretório especificado e path que correspondem às opções de enumeração e padrão de pesquisa especificados.

Exceções

.NET Framework e .NET Core versões anteriores à 2.1: path é uma cadeia de caracteres de comprimento zero, contém apenas espaço em branco ou contém caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars() método.

-ou-

searchPattern não contém um padrão válido.

path é null.

-ou-

searchPattern é null.

path é inválido, como fazer referência a uma unidade não mapeada.

path é um nome de arquivo.

O caminho, o nome do arquivo ou combinado especificado excedem o comprimento máximo definido pelo sistema.

O chamador não tem a permissão necessária.

Exemplos

O exemplo a seguir mostra como recuperar todos os arquivos de texto em um diretório e seus subdiretórios e movê-los para um novo diretório. Depois que os arquivos são movidos, eles não existem mais nos diretórios originais.

using System;
using System.IO;

partial class Example1
{
    static void EnumerationOptionsExample()
    {
        string sourceDirectory = @"C:\current";
        string archiveDirectory = @"C:\archive";

        var options = new EnumerationOptions
        {
            MatchCasing = MatchCasing.CaseInsensitive,
            MatchType = MatchType.Simple,
            RecurseSubdirectories = true
        };

        try
        {
            var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", options);

            foreach (string currentFile in txtFiles)
            {
                string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

let options = new EnumerationOptions(
    MatchCasing = MatchCasing.CaseInsensitive,
    MatchType = MatchType.Simple,
    RecurseSubdirectories = true
)

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", options)

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with ex ->
    printfn $"{ex.Message}"
Imports System.IO

Partial Class Example1
    Shared Sub EnumerationOptionsExample()

        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Dim options As New EnumerationOptions() With {
            .MatchCasing = MatchCasing.CaseInsensitive,
            .MatchType = MatchType.Simple,
            .RecurseSubdirectories = True
        }

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", options)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

    End Sub
End Class

O exemplo a seguir enumera recursivamente todos os arquivos com a .txt extensão, ignorando os diretórios e arquivos inacessíveis. Ele lê cada linha do arquivo e exibe a linha se ela contiver a cadeia de caracteres "Microsoft".

using System;
using System.IO;
using System.Linq;

partial class Example2
{
    static void EnumerationOptionsExample()
    {
        try
        {
            // Set a variable to the My Documents path.
            string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            // Set the options for the enumeration.
            var options = new EnumerationOptions
            {
                IgnoreInaccessible = true,
                MatchCasing = MatchCasing.CaseInsensitive,
                MatchType = MatchType.Simple,
                RecurseSubdirectories = true
            };

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", options)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine($"{f.File}\t{f.Line}");
            }

            Console.WriteLine($"{files.Count()} files found.");
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
open System
open System.IO

try
    // Set a variable to the My Documents path.
    let docPath =
        Environment.GetFolderPath Environment.SpecialFolder.MyDocuments

    // Set the options for the enumeration.
    let options = new EnumerationOptions(
        IgnoreInaccessible = true,
        MatchCasing = MatchCasing.CaseInsensitive,
        MatchType = MatchType.Simple,
        RecurseSubdirectories = true
    )

    let files =
        query {
            for file in Directory.EnumerateFiles(docPath, "*.txt", options) do
            for line in File.ReadLines file do
            where (line.Contains "Microsoft")
            select {| File = file; Line = line |}
        }

    for f in files do
        printfn $"{f.File}\t{f.Line}"

    printfn $"{Seq.length files} files found."
with
| :? PathTooLongException as pathEx -> printfn $"{pathEx.Message}"
| ex -> printfn $"{ex.Message}"
Imports System.IO
Imports System.Xml.Linq

Partial Class Example2
    Shared Sub EnumerationOptionsExample()

        Try
            ' Set a variable to the My Documents Path.
            Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

            ' Set the options for the enumeration.
            Dim options As New EnumerationOptions() With {
                .IgnoreInaccessible = True,
                .MatchCasing = MatchCasing.CaseInsensitive,
                .MatchType = MatchType.Simple,
                .RecurseSubdirectories = True
            }

            Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", options)
                        From line In File.ReadLines(chkFile)
                        Where line.Contains("Microsoft")
                        Select New With {
                            .curFile = chkFile,
                            .curLine = line
                        }

            For Each f In files
                Console.WriteLine($"{f.curFile}\t{f.curLine}")
            Next

            Console.WriteLine($"{files.Count} files found.")
        Catch pathEx As PathTooLongException
            Console.WriteLine(pathEx.Message)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

    End Sub
End Class

Comentários

searchPattern pode ser uma combinação de caracteres literais e curinga, mas não dá suporte a expressões regulares. Os especificadores curinga a seguir são permitidos em searchPattern.

Especificador curinga Partidas
* (asterisco) Zero ou mais caracteres nessa posição.
? (ponto de interrogação) Exatamente um caractere nessa posição.

Caracteres diferentes do curinga são caracteres literais. Por exemplo, a searchPattern cadeia de caracteres "*t" pesquisa todos os nomes ao path terminar com a letra "t". A searchPattern cadeia de caracteres "s*" pesquisa todos os nomes no path início com a letra "s".

Note

.NET Framework only: When you use the asterisk wildcard character in searchPattern and you specify a three-character file extension, for example, "*.txt", this method also returns files with extensions that begin with the specified extension. Por exemplo, o padrão de pesquisa "*.xls" retorna "book.xls" e "book.xlsx". Esse comportamento só ocorrerá se um asterisco for usado no padrão de pesquisa e a extensão de arquivo fornecida for exatamente três caracteres. Se você usar o caractere curinga de ponto de interrogação em algum lugar no padrão de pesquisa, esse método retornará apenas os arquivos que correspondem exatamente à extensão de arquivo especificada. A tabela a seguir ilustra essa anomalia no .NET Framework.

Arquivos no diretório Padrão de pesquisa .NET 5+ retorna .NET Framework retorna
file.ai, file.aif *.ai file.ai file.ai
book.xls, book.xlsx *.xls book.xls book.xls, book.xlsx
ello.txt, hello.txt, hello.txtt ?ello.txt hello.txt hello.txt

searchPattern não pode terminar em dois períodos ("..") ou conter dois períodos ("..") seguidos ou DirectorySeparatorCharAltDirectorySeparatorChar, nem pode conter caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars método.

Você pode especificar informações de caminho relativo com o path parâmetro. As informações de caminho relativo são interpretadas como relativas ao diretório de trabalho atual, que você pode determinar usando o GetCurrentDirectory método.

Os EnumerateFiles métodos e os GetFiles métodos diferem da seguinte maneira: quando você usa EnumerateFiles, você pode começar a enumerar a coleção de nomes antes que toda a coleção seja retornada. Ao usar GetFiles, você deve aguardar que toda a matriz de nomes seja retornada antes de poder acessar a matriz. Portanto, quando você está trabalhando com muitos arquivos e diretórios, EnumerateFiles pode ser mais eficiente.

A coleção retornada não é armazenada em cache. Cada chamada para a GetEnumerator coleção inicia uma nova enumeração.

Aplica-se a

EnumerateFiles(String, String, SearchOption)

Retorna uma coleção enumerável de nomes de arquivo completos que correspondem a um padrão de pesquisa em um caminho especificado e, opcionalmente, pesquisa subdiretórios.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);
static member EnumerateFiles : string * string * System.IO.SearchOption -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String, searchOption As SearchOption) As IEnumerable(Of String)

Parâmetros

path
String

O caminho relativo ou absoluto para o diretório a ser pesquisado. Essa cadeia de caracteres não diferencia maiúsculas de minúsculas.

searchPattern
String

A cadeia de caracteres de pesquisa a ser correspondida com os nomes dos arquivos em path. Esse parâmetro pode conter uma combinação de caracteres de caminho literal válido e curinga (* e ?), mas não dá suporte a expressões regulares.

searchOption
SearchOption

Um dos valores de enumeração que especifica se a operação de pesquisa deve incluir apenas o diretório atual ou deve incluir todos os subdiretórios. O valor padrão é TopDirectoryOnly.

Retornos

Uma coleção enumerável dos nomes completos (incluindo caminhos) para os arquivos no diretório especificado e path que correspondem ao padrão de pesquisa especificado e à opção de pesquisa.

Exceções

.NET Framework e .NET Core versões anteriores à 2.1: path é uma cadeia de caracteres de comprimento zero, contém apenas espaço em branco ou contém caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars() método.

-ou-

searchPattern não contém um padrão válido.

path é null.

-ou-

searchPattern é null.

searchOption não é um valor válido SearchOption .

path é inválido, como fazer referência a uma unidade não mapeada.

path é um nome de arquivo.

O caminho, o nome do arquivo ou combinado especificado excedem o comprimento máximo definido pelo sistema.

O chamador não tem a permissão necessária.

O chamador não tem a permissão necessária.

Exemplos

O exemplo a seguir mostra como recuperar todos os arquivos de texto em um diretório e seus subdiretórios e movê-los para um novo diretório. Depois que os arquivos são movidos, eles não existem mais nos diretórios originais.

using System;
using System.IO;

partial class Example1
{
    static void SearchOptionExample()
    {
        string sourceDirectory = @"C:\current";
        string archiveDirectory = @"C:\archive";

        try
        {
            var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories);

            foreach (string currentFile in txtFiles)
            {
                string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
    printfn $"{e.Message}"
Imports System.IO

Partial Class Example1
    Shared Sub SearchOptionsExample()

        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub
End Class

O exemplo a seguir enumera recursivamente todos os arquivos que têm a extensão .txt, lê cada linha do arquivo e exibe a linha se ela contiver a cadeia de caracteres "Microsoft".

using System;
using System.IO;
using System.Linq;

partial class Example2
{
    static void SearchOptionExample()
    {
        try
        {
            // Set a variable to the My Documents path.
            string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine($"{f.File}\t{f.Line}");
            }

            Console.WriteLine($"{files.Count()} files found.");
        }
        catch (UnauthorizedAccessException uAEx)
        {
            Console.WriteLine(uAEx.Message);
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
    }
}
open System
open System.IO

try
    // Set a variable to the My Documents path.
    let docPath =
        Environment.GetFolderPath Environment.SpecialFolder.MyDocuments

    let files =
        query {
            for file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories) do
            for line in File.ReadLines file do
            where (line.Contains "Microsoft")
            select {| File = file; Line = line |}
        }

    for f in files do
        printfn $"{f.File}\t{f.Line}"
    printfn $"{Seq.length files} files found."

with
| :? UnauthorizedAccessException as uAEx -> printfn $"{uAEx.Message}"
| :? PathTooLongException as pathEx -> printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Xml.Linq

Partial Class Example2
    Shared Sub SearchOptionExample()

        Try
            Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

            Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        From line In File.ReadLines(chkFile)
                        Where line.Contains("Microsoft")
                        Select New With {.curFile = chkFile, .curLine = line}

            For Each f In files
                Console.WriteLine($"{f.curFile}\t{f.curLine}")
            Next

            Console.WriteLine($"{files.Count} files found.")
        Catch uAEx As UnauthorizedAccessException
            Console.WriteLine(uAEx.Message)
        Catch pathEx As PathTooLongException
            Console.WriteLine(pathEx.Message)
        End Try

    End Sub
End Class

Comentários

searchPattern pode ser uma combinação de caracteres literais e curinga, mas não dá suporte a expressões regulares. Os especificadores curinga a seguir são permitidos em searchPattern.

Especificador curinga Partidas
* (asterisco) Zero ou mais caracteres nessa posição.
? (ponto de interrogação) Exatamente um caractere nessa posição.

Caracteres diferentes do curinga são caracteres literais. Por exemplo, a searchPattern cadeia de caracteres "*t" pesquisa todos os nomes ao path terminar com a letra "t". A searchPattern cadeia de caracteres "s*" pesquisa todos os nomes no path início com a letra "s".

Note

.NET Framework only: When you use the asterisk wildcard character in searchPattern and you specify a three-character file extension, for example, "*.txt", this method also returns files with extensions that begin with the specified extension. Por exemplo, o padrão de pesquisa "*.xls" retorna "book.xls" e "book.xlsx". Esse comportamento só ocorrerá se um asterisco for usado no padrão de pesquisa e a extensão de arquivo fornecida for exatamente três caracteres. Se você usar o caractere curinga de ponto de interrogação em algum lugar no padrão de pesquisa, esse método retornará apenas os arquivos que correspondem exatamente à extensão de arquivo especificada. A tabela a seguir ilustra essa anomalia no .NET Framework.

Arquivos no diretório Padrão de pesquisa .NET 5+ retorna .NET Framework retorna
file.ai, file.aif *.ai file.ai file.ai
book.xls, book.xlsx *.xls book.xls book.xls, book.xlsx
ello.txt, hello.txt, hello.txtt ?ello.txt hello.txt hello.txt

searchPattern não pode terminar em dois períodos ("..") ou conter dois períodos ("..") seguidos ou DirectorySeparatorCharAltDirectorySeparatorChar, nem pode conter caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars método.

Você pode especificar informações de caminho relativo com o path parâmetro. As informações de caminho relativo são interpretadas como relativas ao diretório de trabalho atual, que você pode determinar usando o GetCurrentDirectory método.

Os EnumerateFiles métodos e os GetFiles métodos diferem da seguinte maneira: quando você usa EnumerateFiles, você pode começar a enumerar a coleção de nomes antes que toda a coleção seja retornada. Ao usar GetFiles, você deve aguardar que toda a matriz de nomes seja retornada antes de poder acessar a matriz. Portanto, quando você está trabalhando com muitos arquivos e diretórios, EnumerateFiles pode ser mais eficiente.

A coleção retornada não é armazenada em cache. Cada chamada para a GetEnumerator coleção inicia uma nova enumeração.

Aplica-se a

EnumerateFiles(String)

Retorna uma coleção enumerável de nomes de arquivo completos em um caminho especificado.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);
static member EnumerateFiles : string -> seq<string>
Public Shared Function EnumerateFiles (path As String) As IEnumerable(Of String)

Parâmetros

path
String

O caminho relativo ou absoluto para o diretório a ser pesquisado. Essa cadeia de caracteres não diferencia maiúsculas de minúsculas.

Retornos

Uma coleção enumerável dos nomes completos (incluindo caminhos) para os arquivos no diretório especificado por path.

Exceções

.NET Framework e .NET Core versões anteriores à 2.1: path é uma cadeia de caracteres de comprimento zero, contém apenas espaço em branco ou contém caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars() método.

path é null.

path é inválido, como fazer referência a uma unidade não mapeada.

path é um nome de arquivo.

O caminho, o nome do arquivo ou combinado especificado excedem o comprimento máximo definido pelo sistema.

O chamador não tem a permissão necessária.

O chamador não tem a permissão necessária.

Exemplos

O exemplo a seguir mostra como recuperar todos os arquivos em um diretório e movê-los para um novo diretório. Depois que os arquivos são movidos, eles não existem mais no diretório original.

using System;
using System.IO;

partial class Example1
{
    static void OneStringExample()
    {
        string sourceDirectory = @"C:\current";
        string archiveDirectory = @"C:\archive";

        try
        {
            var txtFiles = Directory.EnumerateFiles(sourceDirectory);

            foreach (string currentFile in txtFiles)
            {
                string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles sourceDirectory

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
    printfn $"{e.Message}"
Imports System.IO

Partial Class Example1
    Shared Sub OneStringExample()

        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub
End Class

O exemplo a seguir enumera os arquivos no diretório especificado, lê cada linha do arquivo e exibe a linha se ela contiver a cadeia de caracteres "Europa".

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;

partial class Example2
{
    static void OneStringExample()
    {
        try
        {
            // LINQ query for all files containing the word 'Europe'.
            var files = from file in Directory.EnumerateFiles(@"\\archives1\library\")
                        where file.ToLower().Contains("europe")
                        select file;

            foreach (var file in files)
            {
                Console.WriteLine("{0}", file);
            }

            Console.WriteLine("{0} files found.", files.Count<string>().ToString());
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
open System
open System.IO

try
    // All files containing the word 'Europe'.
    let files =
        Directory.EnumerateFiles @"\\archives1\library\"
        |> Seq.filter (fun file -> file.ToLower().Contains "europe")

    for file in files do
        printfn $"{file}"
    printfn $"{Seq.length files} files found."

with 
| :? UnauthorizedAccessException as uaEx ->
    printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
    printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Linq

Partial Class Example2
    Shared Sub OneStringExample()

        Try
            ' LINQ query for all files containing the word 'Europe'.
            Dim files = From file In Directory.EnumerateFiles("\\archives1\library\")
                        Where file.ToLower().Contains("europe")

            For Each file In files
                Console.WriteLine("{0}", file)
            Next

            Console.WriteLine("{0} files found.", files.Count.ToString())
        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try

    End Sub
End Class

Comentários

Você pode especificar informações de caminho relativo com o path parâmetro. As informações de caminho relativo são interpretadas como relativas ao diretório de trabalho atual, que você pode determinar usando o GetCurrentDirectory método.

Os EnumerateFiles métodos e os GetFiles métodos diferem da seguinte maneira: quando você usa EnumerateFiles, você pode começar a enumerar a coleção de nomes antes que toda a coleção seja retornada. Ao usar GetFiles, você deve aguardar que toda a matriz de nomes seja retornada antes de poder acessar a matriz. Portanto, quando você está trabalhando com muitos arquivos e diretórios, EnumerateFiles pode ser mais eficiente.

A coleção retornada não é armazenada em cache; cada chamada para a GetEnumerator coleção iniciará uma nova enumeração.

Aplica-se a

EnumerateFiles(String, String)

Retorna uma coleção enumerável de nomes de arquivo completos que correspondem a um padrão de pesquisa em um caminho especificado.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);
static member EnumerateFiles : string * string -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String) As IEnumerable(Of String)

Parâmetros

path
String

O caminho relativo ou absoluto para o diretório a ser pesquisado. Essa cadeia de caracteres não diferencia maiúsculas de minúsculas.

searchPattern
String

A cadeia de caracteres de pesquisa a ser correspondida com os nomes dos arquivos em path. Esse parâmetro pode conter uma combinação de caracteres de caminho literal válido e curinga (* e ?), mas não dá suporte a expressões regulares.

Retornos

Uma coleção enumerável dos nomes completos (incluindo caminhos) para os arquivos no diretório especificado e path que correspondem ao padrão de pesquisa especificado.

Exceções

.NET Framework e .NET Core versões anteriores à 2.1: path é uma cadeia de caracteres de comprimento zero, contém apenas espaço em branco ou contém caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars() método.

-ou-

searchPattern não contém um padrão válido.

path é null.

-ou-

searchPattern é null.

path é inválido, como fazer referência a uma unidade não mapeada.

path é um nome de arquivo.

O caminho, o nome do arquivo ou combinado especificado excedem o comprimento máximo definido pelo sistema.

O chamador não tem a permissão necessária.

O chamador não tem a permissão necessária.

Exemplos

O exemplo a seguir mostra como recuperar todos os arquivos de texto em um diretório e movê-los para um novo diretório. Depois que os arquivos são movidos, eles não existem mais no diretório original.

using System;
using System.IO;

partial class Example1
{
    static void TwoStringsExample()
    {
        string sourceDirectory = @"C:\current";
        string archiveDirectory = @"C:\archive";

        try
        {
            var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");

            foreach (string currentFile in txtFiles)
            {
                string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))

with e ->
    printfn $"{e.Message}"
Imports System.IO

Partial Class Example1
    Shared Sub TwoStringExample()

        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub
End Class

O exemplo a seguir enumera os arquivos no diretório especificado que têm uma extensão ".txt", lê cada linha do arquivo e exibe a linha se ela contiver a cadeia de caracteres "Europa".

using System;
using System.Linq;
using System.IO;

partial class Example2
{
    static void TwoStringsExample()
    {
        try
        {
            // LINQ query for all .txt files containing the word 'Europe'.
            var files = from file in Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
                        where file.ToLower().Contains("europe")
                        select file;

            foreach (var file in files)
            {
                Console.WriteLine("{0}", file);
            }

            Console.WriteLine("{0} files found.", files.Count<string>().ToString());
        }

        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
open System
open System.IO

try
    // All .txt files containing the word 'Europe'.
    let files = 
        Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
        |> Seq.filter(fun file -> file.ToLower().Contains "europe")

    for file in files do
        printfn $"{file}"
    printfn $"{Seq.length files} files found."

with
| :? UnauthorizedAccessException as uaEx ->
    printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
    printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Linq

Partial Class Example2
    Shared Sub TwoStringsExample()

        Try
            ' LINQ query for all .txt files containing the word 'Europe'.
            Dim files = From file In Directory.EnumerateFiles("\\archives1\library\", "*.txt")
                        Where file.ToLower().Contains("europe")

            For Each file In files
                Console.WriteLine("{0}", file)
            Next

            Console.WriteLine("{0} files found.", files.Count.ToString())
        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try

    End Sub
End Class

Comentários

searchPattern pode ser uma combinação de caracteres literais e curinga, mas não dá suporte a expressões regulares. Os especificadores curinga a seguir são permitidos em searchPattern.

Especificador curinga Partidas
* (asterisco) Zero ou mais caracteres nessa posição.
? (ponto de interrogação) Exatamente um caractere nessa posição.

Caracteres diferentes do curinga são caracteres literais. Por exemplo, a searchPattern cadeia de caracteres "*t" pesquisa todos os nomes ao path terminar com a letra "t". A searchPattern cadeia de caracteres "s*" pesquisa todos os nomes no path início com a letra "s".

Note

.NET Framework only: When you use the asterisk wildcard character in searchPattern and you specify a three-character file extension, for example, "*.txt", this method also returns files with extensions that begin with the specified extension. Por exemplo, o padrão de pesquisa "*.xls" retorna "book.xls" e "book.xlsx". Esse comportamento só ocorrerá se um asterisco for usado no padrão de pesquisa e a extensão de arquivo fornecida for exatamente três caracteres. Se você usar o caractere curinga de ponto de interrogação em algum lugar no padrão de pesquisa, esse método retornará apenas os arquivos que correspondem exatamente à extensão de arquivo especificada. A tabela a seguir ilustra essa anomalia no .NET Framework.

Arquivos no diretório Padrão de pesquisa .NET 5+ retorna .NET Framework retorna
file.ai, file.aif *.ai file.ai file.ai
book.xls, book.xlsx *.xls book.xls book.xls, book.xlsx
ello.txt, hello.txt, hello.txtt ?ello.txt hello.txt hello.txt

searchPattern não pode terminar em dois períodos ("..") ou conter dois períodos ("..") seguidos ou DirectorySeparatorCharAltDirectorySeparatorChar, nem pode conter caracteres inválidos. Você pode consultar caracteres inválidos usando o GetInvalidPathChars método.

Você pode especificar informações de caminho relativo com o path parâmetro. As informações de caminho relativo são interpretadas como relativas ao diretório de trabalho atual, que você pode determinar usando o GetCurrentDirectory método.

Os EnumerateFiles métodos e GetFiles os métodos diferem da seguinte maneira: quando você usa EnumerateFiles, você pode começar a enumerar a coleção de nomes antes que toda a coleção seja retornada; quando você usar GetFiles, deverá aguardar que toda a matriz de nomes seja retornada antes de poder acessar a matriz. Portanto, quando você está trabalhando com muitos arquivos e diretórios, EnumerateFiles pode ser mais eficiente.

A coleção retornada não é armazenada em cache. Cada chamada para a GetEnumerator coleção inicia uma nova enumeração.

Aplica-se a