Directory.EnumerateFiles Méthode

Définition

Retourne une collection énumérable de noms de fichiers complets qui répondent aux critères spécifiés.

Surcharges

Nom Description
EnumerateFiles(String, String, EnumerationOptions)

Retourne une collection énumérable de noms de fichiers complets qui correspondent à un modèle de recherche et des options d’énumération dans un chemin d’accès spécifié, et recherche éventuellement des sous-répertoires.

EnumerateFiles(String, String, SearchOption)

Retourne une collection énumérable de noms de fichiers complets qui correspondent à un modèle de recherche dans un chemin d’accès spécifié et recherche éventuellement des sous-répertoires.

EnumerateFiles(String)

Retourne une collection énumérable de noms de fichiers complets dans un chemin d’accès spécifié.

EnumerateFiles(String, String)

Retourne une collection énumérable de noms de fichiers complets qui correspondent à un modèle de recherche dans un chemin d’accès spécifié.

EnumerateFiles(String, String, EnumerationOptions)

Retourne une collection énumérable de noms de fichiers complets qui correspondent à un modèle de recherche et des options d’énumération dans un chemin d’accès spécifié, et recherche éventuellement des sous-répertoires.

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)

Paramètres

path
String

Chemin d’accès relatif ou absolu au répertoire à rechercher. Cette chaîne n’est pas sensible à la casse.

searchPattern
String

Chaîne de recherche à mettre en correspondance avec les noms de fichiers dans path. Ce paramètre peut contenir une combinaison de caractères génériques et de chemins littéraux valides (* et ?), mais il ne prend pas en charge les expressions régulières.

enumerationOptions
EnumerationOptions

Objet qui décrit la configuration de recherche et d’énumération à utiliser.

Retours

Collection énumérable des noms complets (y compris les chemins) des fichiers du répertoire spécifié path et qui correspondent aux options de recherche et d’énumération spécifiées.

Exceptions

.NET Framework et les versions .NET Core antérieures à 2.1 : path est une chaîne de longueur nulle, contient uniquement des espaces blancs ou contient des caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars().

-ou-

searchPattern ne contient pas de modèle valide.

path a la valeur null.

-ou-

searchPattern a la valeur null.

path n’est pas valide, par exemple en faisant référence à un lecteur non mappé.

path est un nom de fichier.

Le chemin d’accès, le nom de fichier ou combiné spécifié dépassent la longueur maximale définie par le système.

L’appelant n’a pas l’autorisation requise.

Exemples

L’exemple suivant montre comment récupérer tous les fichiers texte d’un répertoire et ses sous-répertoires et les déplacer vers un nouveau répertoire. Une fois les fichiers déplacés, ils n’existent plus dans les répertoires d’origine.

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

L’exemple suivant énumère de manière récursive tous les fichiers avec l’extension .txt , ignorant les répertoires et fichiers inaccessibles. Il lit chaque ligne du fichier et affiche la ligne si elle contient la chaîne « 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

Remarques

searchPattern peut être une combinaison de caractères littéraux et génériques, mais elle ne prend pas en charge les expressions régulières. Les spécificateurs génériques suivants sont autorisés dans searchPattern.

Spécificateur de caractères génériques Correspondances
* (astérisque) Zéro ou plusieurs caractères dans cette position.
? (point d’interrogation) Exactement un caractère dans cette position.

Les caractères autres que le caractère générique sont des caractères littérals. Par exemple, la searchPattern chaîne « *t » recherche tous les noms se path terminant par la lettre « t ». La searchPattern chaîne « s* » recherche tous les noms en path commençant par la lettre « s ».

Note

.NET Framework uniquement : Lorsque vous utilisez le caractère générique astérisque dans searchPattern et que vous spécifiez une extension de fichier à trois caractères, par exemple « *.txt», cette méthode retourne également des fichiers avec des extensions qui begin avec l’extension spécifiée. Par exemple, le modèle de recherche « *.xls» retourne à la fois «book.xls» et «book.xlsx». Ce comportement se produit uniquement si un astérisque est utilisé dans le modèle de recherche et que l’extension de fichier fournie est exactement trois caractères. Si vous utilisez le caractère générique du point d’interrogation quelque part dans le modèle de recherche, cette méthode retourne uniquement les fichiers qui correspondent exactement à l’extension de fichier spécifiée. Le tableau suivant illustre cette anomalie dans .NET Framework.

Fichiers dans le répertoire Modèle de recherche .NET 5+ renvoie .NET Framework retourne
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 ne peut pas se terminer par deux périodes (« .. ») ou contenir deux points (« .. ») suivis DirectorySeparatorChar ou AltDirectorySeparatorChar, ni ne peuvent contenir de caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars.

Vous pouvez spécifier des informations relatives sur le chemin d’accès avec le path paramètre. Les informations relatives au chemin d’accès sont interprétées comme relatives au répertoire de travail actuel, que vous pouvez déterminer à l’aide de la GetCurrentDirectory méthode.

Les méthodes et GetFiles les EnumerateFiles méthodes diffèrent comme suit : Lorsque vous utilisezEnumerateFiles, vous pouvez commencer à énumérer la collection de noms avant que la collection entière ne soit retournée. Lorsque vous utilisez GetFiles, vous devez attendre que l’ensemble du tableau de noms soit retourné avant de pouvoir accéder au tableau. Par conséquent, lorsque vous travaillez avec de nombreux fichiers et répertoires, EnumerateFiles vous pouvez être plus efficace.

La collection retournée n’est pas mise en cache. Chaque appel à la GetEnumerator collection démarre une nouvelle énumération.

S’applique à

EnumerateFiles(String, String, SearchOption)

Retourne une collection énumérable de noms de fichiers complets qui correspondent à un modèle de recherche dans un chemin d’accès spécifié et recherche éventuellement des sous-répertoires.

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)

Paramètres

path
String

Chemin d’accès relatif ou absolu au répertoire à rechercher. Cette chaîne n’est pas sensible à la casse.

searchPattern
String

Chaîne de recherche à mettre en correspondance avec les noms de fichiers dans path. Ce paramètre peut contenir une combinaison de caractères génériques et de chemins littéraux valides (* et ?), mais il ne prend pas en charge les expressions régulières.

searchOption
SearchOption

Une des valeurs d’énumération qui spécifie si l’opération de recherche doit inclure uniquement le répertoire actif ou doit inclure tous les sous-répertoires. La valeur par défaut est TopDirectoryOnly.

Retours

Collection énumérable des noms complets (y compris les chemins) des fichiers du répertoire spécifié path et qui correspondent au modèle de recherche et à l’option de recherche spécifiés.

Exceptions

.NET Framework et les versions .NET Core antérieures à 2.1 : path est une chaîne de longueur nulle, contient uniquement des espaces blancs ou contient des caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars().

-ou-

searchPattern ne contient pas de modèle valide.

path a la valeur null.

-ou-

searchPattern a la valeur null.

searchOption n’est pas une valeur valide SearchOption .

path n’est pas valide, par exemple en faisant référence à un lecteur non mappé.

path est un nom de fichier.

Le chemin d’accès, le nom de fichier ou combiné spécifié dépassent la longueur maximale définie par le système.

L’appelant n’a pas l’autorisation requise.

L’appelant n’a pas l’autorisation requise.

Exemples

L’exemple suivant montre comment récupérer tous les fichiers texte d’un répertoire et de ses sous-répertoires, puis les déplacer vers un nouveau répertoire. Une fois les fichiers déplacés, ils n’existent plus dans les répertoires d’origine.

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

L’exemple suivant énumère de manière récursive tous les fichiers qui ont l’extension .txt, lit chaque ligne du fichier et affiche la ligne si elle contient la chaîne « 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

Remarques

searchPattern peut être une combinaison de caractères littéraux et génériques, mais elle ne prend pas en charge les expressions régulières. Les spécificateurs génériques suivants sont autorisés dans searchPattern.

Spécificateur de caractères génériques Correspondances
* (astérisque) Zéro ou plusieurs caractères dans cette position.
? (point d’interrogation) Exactement un caractère dans cette position.

Les caractères autres que le caractère générique sont des caractères littérals. Par exemple, la searchPattern chaîne « *t » recherche tous les noms se path terminant par la lettre « t ». La searchPattern chaîne « s* » recherche tous les noms en path commençant par la lettre « s ».

Note

.NET Framework uniquement : Lorsque vous utilisez le caractère générique astérisque dans searchPattern et que vous spécifiez une extension de fichier à trois caractères, par exemple « *.txt», cette méthode retourne également des fichiers avec des extensions qui begin avec l’extension spécifiée. Par exemple, le modèle de recherche « *.xls» retourne à la fois «book.xls» et «book.xlsx». Ce comportement se produit uniquement si un astérisque est utilisé dans le modèle de recherche et que l’extension de fichier fournie est exactement trois caractères. Si vous utilisez le caractère générique du point d’interrogation quelque part dans le modèle de recherche, cette méthode retourne uniquement les fichiers qui correspondent exactement à l’extension de fichier spécifiée. Le tableau suivant illustre cette anomalie dans .NET Framework.

Fichiers dans le répertoire Modèle de recherche .NET 5+ renvoie .NET Framework retourne
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 ne peut pas se terminer par deux périodes (« .. ») ou contenir deux points (« .. ») suivis DirectorySeparatorChar ou AltDirectorySeparatorChar, ni ne peuvent contenir de caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars.

Vous pouvez spécifier des informations relatives sur le chemin d’accès avec le path paramètre. Les informations relatives au chemin d’accès sont interprétées comme relatives au répertoire de travail actuel, que vous pouvez déterminer à l’aide de la GetCurrentDirectory méthode.

Les méthodes et GetFiles les EnumerateFiles méthodes diffèrent comme suit : Lorsque vous utilisezEnumerateFiles, vous pouvez commencer à énumérer la collection de noms avant que la collection entière ne soit retournée. Lorsque vous utilisez GetFiles, vous devez attendre que l’ensemble du tableau de noms soit retourné avant de pouvoir accéder au tableau. Par conséquent, lorsque vous travaillez avec de nombreux fichiers et répertoires, EnumerateFiles vous pouvez être plus efficace.

La collection retournée n’est pas mise en cache. Chaque appel à la GetEnumerator collection démarre une nouvelle énumération.

S’applique à

EnumerateFiles(String)

Retourne une collection énumérable de noms de fichiers complets dans un chemin d’accès spécifié.

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)

Paramètres

path
String

Chemin d’accès relatif ou absolu au répertoire à rechercher. Cette chaîne n’est pas sensible à la casse.

Retours

Collection énumérable des noms complets (y compris les chemins) des fichiers du répertoire spécifié par path.

Exceptions

.NET Framework et les versions .NET Core antérieures à 2.1 : path est une chaîne de longueur nulle, contient uniquement des espaces blancs ou contient des caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars().

path a la valeur null.

path n’est pas valide, par exemple en faisant référence à un lecteur non mappé.

path est un nom de fichier.

Le chemin d’accès, le nom de fichier ou combiné spécifié dépassent la longueur maximale définie par le système.

L’appelant n’a pas l’autorisation requise.

L’appelant n’a pas l’autorisation requise.

Exemples

L’exemple suivant montre comment récupérer tous les fichiers d’un répertoire et les déplacer vers un nouveau répertoire. Une fois les fichiers déplacés, ils n’existent plus dans le répertoire d’origine.

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

L’exemple suivant énumère les fichiers dans le répertoire spécifié, lit chaque ligne du fichier et affiche la ligne si elle contient la chaîne « Europe ».

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

Remarques

Vous pouvez spécifier des informations relatives sur le chemin d’accès avec le path paramètre. Les informations relatives au chemin d’accès sont interprétées comme relatives au répertoire de travail actuel, que vous pouvez déterminer à l’aide de la GetCurrentDirectory méthode.

Les méthodes et GetFiles les EnumerateFiles méthodes diffèrent comme suit : Lorsque vous utilisezEnumerateFiles, vous pouvez commencer à énumérer la collection de noms avant que la collection entière ne soit retournée. Lorsque vous utilisez GetFiles, vous devez attendre que l’ensemble du tableau de noms soit retourné avant de pouvoir accéder au tableau. Par conséquent, lorsque vous travaillez avec de nombreux fichiers et répertoires, EnumerateFiles vous pouvez être plus efficace.

La collection retournée n’est pas mise en cache ; chaque appel à la GetEnumerator collection démarre une nouvelle énumération.

S’applique à

EnumerateFiles(String, String)

Retourne une collection énumérable de noms de fichiers complets qui correspondent à un modèle de recherche dans un chemin d’accès spécifié.

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)

Paramètres

path
String

Chemin d’accès relatif ou absolu au répertoire à rechercher. Cette chaîne n’est pas sensible à la casse.

searchPattern
String

Chaîne de recherche à mettre en correspondance avec les noms de fichiers dans path. Ce paramètre peut contenir une combinaison de caractères génériques et de chemins littéraux valides (* et ?), mais il ne prend pas en charge les expressions régulières.

Retours

Collection énumérable des noms complets (y compris les chemins) des fichiers du répertoire spécifié path et qui correspondent au modèle de recherche spécifié.

Exceptions

.NET Framework et les versions .NET Core antérieures à 2.1 : path est une chaîne de longueur nulle, contient uniquement des espaces blancs ou contient des caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars().

-ou-

searchPattern ne contient pas de modèle valide.

path a la valeur null.

-ou-

searchPattern a la valeur null.

path n’est pas valide, par exemple en faisant référence à un lecteur non mappé.

path est un nom de fichier.

Le chemin d’accès, le nom de fichier ou combiné spécifié dépassent la longueur maximale définie par le système.

L’appelant n’a pas l’autorisation requise.

L’appelant n’a pas l’autorisation requise.

Exemples

L’exemple suivant montre comment récupérer tous les fichiers texte d’un répertoire et les déplacer vers un nouveau répertoire. Une fois les fichiers déplacés, ils n’existent plus dans le répertoire d’origine.

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

L’exemple suivant énumère les fichiers du répertoire spécifié qui ont une extension «.txt», lit chaque ligne du fichier et affiche la ligne s’il contient la chaîne « Europe ».

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

Remarques

searchPattern peut être une combinaison de caractères littéraux et génériques, mais elle ne prend pas en charge les expressions régulières. Les spécificateurs génériques suivants sont autorisés dans searchPattern.

Spécificateur de caractères génériques Correspondances
* (astérisque) Zéro ou plusieurs caractères dans cette position.
? (point d’interrogation) Exactement un caractère dans cette position.

Les caractères autres que le caractère générique sont des caractères littérals. Par exemple, la searchPattern chaîne « *t » recherche tous les noms se path terminant par la lettre « t ». La searchPattern chaîne « s* » recherche tous les noms en path commençant par la lettre « s ».

Note

.NET Framework uniquement : Lorsque vous utilisez le caractère générique astérisque dans searchPattern et que vous spécifiez une extension de fichier à trois caractères, par exemple « *.txt», cette méthode retourne également des fichiers avec des extensions qui begin avec l’extension spécifiée. Par exemple, le modèle de recherche « *.xls» retourne à la fois «book.xls» et «book.xlsx». Ce comportement se produit uniquement si un astérisque est utilisé dans le modèle de recherche et que l’extension de fichier fournie est exactement trois caractères. Si vous utilisez le caractère générique du point d’interrogation quelque part dans le modèle de recherche, cette méthode retourne uniquement les fichiers qui correspondent exactement à l’extension de fichier spécifiée. Le tableau suivant illustre cette anomalie dans .NET Framework.

Fichiers dans le répertoire Modèle de recherche .NET 5+ renvoie .NET Framework retourne
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 ne peut pas se terminer par deux périodes (« .. ») ou contenir deux points (« .. ») suivis DirectorySeparatorChar ou AltDirectorySeparatorChar, ni ne peuvent contenir de caractères non valides. Vous pouvez rechercher des caractères non valides à l’aide de la méthode GetInvalidPathChars.

Vous pouvez spécifier des informations relatives sur le chemin d’accès avec le path paramètre. Les informations relatives au chemin d’accès sont interprétées comme relatives au répertoire de travail actuel, que vous pouvez déterminer à l’aide de la GetCurrentDirectory méthode.

Les EnumerateFiles méthodes diffèrent GetFiles comme suit : Lorsque vous utilisez EnumerateFiles, vous pouvez commencer à énumérer la collection de noms avant que l’ensemble de la collection soit retournée ; lorsque vous utilisez GetFiles, vous devez attendre que l’ensemble du tableau de noms soit retourné avant de pouvoir accéder au tableau. Par conséquent, lorsque vous travaillez avec de nombreux fichiers et répertoires, EnumerateFiles vous pouvez être plus efficace.

La collection retournée n’est pas mise en cache. Chaque appel à la GetEnumerator collection démarre une nouvelle énumération.

S’applique à