Directory.EnumerateFiles Метод

Определение

Возвращает перечисленную коллекцию полных имен файлов, удовлетворяющих указанным критериям.

Перегрузки

Имя Описание
EnumerateFiles(String, String, SearchOption)

Возвращает перечисленную коллекцию полных имен файлов, соответствующих шаблону поиска в указанном пути, и при необходимости выполняет поиск подкаталогов.

EnumerateFiles(String, String, EnumerationOptions)

Возвращает перечисленную коллекцию полных имен файлов, соответствующих шаблону поиска и параметрам перечисления в указанном пути, а также при необходимости выполняет поиск подкаталогов.

EnumerateFiles(String)

Возвращает перечисленную коллекцию полных имен файлов в указанном пути.

EnumerateFiles(String, String)

Возвращает перечисленную коллекцию полных имен файлов, которые соответствуют шаблону поиска в указанном пути.

EnumerateFiles(String, String, SearchOption)

Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs

Возвращает перечисленную коллекцию полных имен файлов, соответствующих шаблону поиска в указанном пути, и при необходимости выполняет поиск подкаталогов.

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)

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. Эта строка не учитывает регистр.

searchPattern
String

Строка поиска, соответствующая именам файлов.path Этот параметр может содержать сочетание допустимых символов литерала и подстановочных знаков (* и ?), но не поддерживает регулярные выражения.

searchOption
SearchOption

Одно из значений перечисления, указывающее, должна ли операция поиска включать только текущий каталог или включать все подкаталоги. Значение по умолчанию — TopDirectoryOnly.

Возвращаемое значение

Перечисленная коллекция полных имен (включая пути) для файлов в каталоге, указанного path в каталоге, и соответствующая указанному шаблону поиска и параметру поиска.

Исключения

.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

–или–

searchPattern не содержит допустимый шаблон.

path равно null.

–или–

searchPattern равно null.

searchOption недопустимое SearchOption значение.

path является недопустимым, например ссылкой на несопоставленный диск.

path — это имя файла.

Указанный путь, имя файла или объединенное превышение заданной системой максимальной длины.

Вызывающий объект не имеет требуемого разрешения.

Вызывающий объект не имеет требуемого разрешения.

Примеры

В следующем примере показано, как получить все текстовые файлы в каталоге и его подкаталогах и переместить их в новый каталог. После перемещения файлов они больше не существуют в исходных каталогах.

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

В следующем примере рекурсивно перечисляются все файлы с расширением .txt, считывает каждую строку файла и отображает строку, если она содержит строку "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

Комментарии

searchPattern может быть сочетанием символов литерала и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели подстановочных знаков разрешены в searchPattern.

Описатель подстановочных знаков Совпадения
* (звездочка) Ноль или больше символов в этой позиции.
? (вопросительный знак) Ровно один символ в этой позиции.

Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".

Note

.NET Framework only: При использовании подстановочного знака звездочки в searchPattern и указано трехзначное расширение файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые begin с указанным расширением. Например, шаблон поиска "*.xls" возвращает оба "book.xls" и "book.xlsx". Это поведение происходит только в том случае, если звездочка используется в шаблоне поиска, а расширение файла предоставляется ровно три символа. Если вы используете подстановочный знак вопросительного знака где-то в шаблоне поиска, этот метод возвращает только файлы, соответствующие указанному расширению файла. В следующей таблице показана аномалия в .NET Framework.

Файлы в каталоге Шаблон поиска возвращает .NET 5+ возвращает .NET Framework
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 не может заканчиваться двумя периодами ("..") или содержать два периода (".).), за которыми следует DirectorySeparatorChar или AltDirectorySeparatorCharне может содержать недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

Можно указать относительные сведения о пути с параметром path . Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу GetCurrentDirectory , который можно определить с помощью метода.

EnumerateFiles Методы GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Возвращаемая коллекция не кэшируется. Каждый вызов GetEnumerator коллекции запускает новое перечисление.

Применяется к

EnumerateFiles(String, String, EnumerationOptions)

Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs

Возвращает перечисленную коллекцию полных имен файлов, соответствующих шаблону поиска и параметрам перечисления в указанном пути, а также при необходимости выполняет поиск подкаталогов.

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)

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. Эта строка не учитывает регистр.

searchPattern
String

Строка поиска, соответствующая именам файлов.path Этот параметр может содержать сочетание допустимых символов литерала и подстановочных знаков (* и ?), но не поддерживает регулярные выражения.

enumerationOptions
EnumerationOptions

Объект, описывающий конфигурацию поиска и перечисления для использования.

Возвращаемое значение

Перечисленная коллекция полных имен (включая пути) для файлов в каталоге, указанного path в каталоге, и совпадающая с указанными параметрами поиска и перечисления.

Исключения

.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

–или–

searchPattern не содержит допустимый шаблон.

path равно null.

–или–

searchPattern равно null.

path является недопустимым, например ссылкой на несопоставленный диск.

path — это имя файла.

Указанный путь, имя файла или объединенное превышение заданной системой максимальной длины.

Вызывающий объект не имеет требуемого разрешения.

Примеры

В следующем примере показано, как получить все текстовые файлы в каталоге и его подкаталогах и переместить их в новый каталог. После перемещения файлов они больше не существуют в исходных каталогах.

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

В следующем примере рекурсивно перечисляются все файлы с .txt расширением, игнорируя недоступные каталоги и файлы. Он считывает каждую строку файла и отображает строку, если она содержит строку "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

Комментарии

searchPattern может быть сочетанием символов литерала и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели подстановочных знаков разрешены в searchPattern.

Описатель подстановочных знаков Совпадения
* (звездочка) Ноль или больше символов в этой позиции.
? (вопросительный знак) Ровно один символ в этой позиции.

Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".

Note

.NET Framework only: При использовании подстановочного знака звездочки в searchPattern и указано трехзначное расширение файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые begin с указанным расширением. Например, шаблон поиска "*.xls" возвращает оба "book.xls" и "book.xlsx". Это поведение происходит только в том случае, если звездочка используется в шаблоне поиска, а расширение файла предоставляется ровно три символа. Если вы используете подстановочный знак вопросительного знака где-то в шаблоне поиска, этот метод возвращает только файлы, соответствующие указанному расширению файла. В следующей таблице показана аномалия в .NET Framework.

Файлы в каталоге Шаблон поиска возвращает .NET 5+ возвращает .NET Framework
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 не может заканчиваться двумя периодами ("..") или содержать два периода (".).), за которыми следует DirectorySeparatorChar или AltDirectorySeparatorCharне может содержать недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

Можно указать относительные сведения о пути с параметром path . Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу GetCurrentDirectory , который можно определить с помощью метода.

EnumerateFiles Методы GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Возвращаемая коллекция не кэшируется. Каждый вызов GetEnumerator коллекции запускает новое перечисление.

Применяется к

EnumerateFiles(String)

Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs

Возвращает перечисленную коллекцию полных имен файлов в указанном пути.

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)

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. Эта строка не учитывает регистр.

Возвращаемое значение

Перечисленная коллекция полных имен (включая пути) для файлов в каталоге, указанного в каталоге path.

Исключения

.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

path равно null.

path является недопустимым, например ссылкой на несопоставленный диск.

path — это имя файла.

Указанный путь, имя файла или объединенное превышение заданной системой максимальной длины.

Вызывающий объект не имеет требуемого разрешения.

Вызывающий объект не имеет требуемого разрешения.

Примеры

В следующем примере показано, как получить все файлы в каталоге и переместить их в новый каталог. После перемещения файлов они больше не существуют в исходном каталоге.

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

В следующем примере перечисляются файлы в указанном каталоге, считывается каждая строка файла и отображается строка, если она содержит строку "Европа".

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

Комментарии

Можно указать относительные сведения о пути с параметром path . Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу GetCurrentDirectory , который можно определить с помощью метода.

EnumerateFiles Методы GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Возвращенная коллекция не кэшируется; каждый вызов GetEnumerator коллекции запустит новое перечисление.

Применяется к

EnumerateFiles(String, String)

Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs
Исходный код:
Directory.cs

Возвращает перечисленную коллекцию полных имен файлов, которые соответствуют шаблону поиска в указанном пути.

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)

Параметры

path
String

Относительный или абсолютный путь к каталогу для поиска. Эта строка не учитывает регистр.

searchPattern
String

Строка поиска, соответствующая именам файлов.path Этот параметр может содержать сочетание допустимых символов литерала и подстановочных знаков (* и ?), но не поддерживает регулярные выражения.

Возвращаемое значение

Перечисленная коллекция полных имен (включая пути) для файлов в каталоге, указанного path в каталоге, и соответствующая указанному шаблону поиска.

Исключения

.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

–или–

searchPattern не содержит допустимый шаблон.

path равно null.

–или–

searchPattern равно null.

path является недопустимым, например ссылкой на несопоставленный диск.

path — это имя файла.

Указанный путь, имя файла или объединенное превышение заданной системой максимальной длины.

Вызывающий объект не имеет требуемого разрешения.

Вызывающий объект не имеет требуемого разрешения.

Примеры

В следующем примере показано, как получить все текстовые файлы в каталоге и переместить их в новый каталог. После перемещения файлов они больше не существуют в исходном каталоге.

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

В следующем примере перечисляются файлы в указанном каталоге с расширением ".txt", считывает каждую строку файла и отображает строку, если она содержит строку "Европа".

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

Комментарии

searchPattern может быть сочетанием символов литерала и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели подстановочных знаков разрешены в searchPattern.

Описатель подстановочных знаков Совпадения
* (звездочка) Ноль или больше символов в этой позиции.
? (вопросительный знак) Ровно один символ в этой позиции.

Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".

Note

.NET Framework only: При использовании подстановочного знака звездочки в searchPattern и указано трехзначное расширение файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые begin с указанным расширением. Например, шаблон поиска "*.xls" возвращает оба "book.xls" и "book.xlsx". Это поведение происходит только в том случае, если звездочка используется в шаблоне поиска, а расширение файла предоставляется ровно три символа. Если вы используете подстановочный знак вопросительного знака где-то в шаблоне поиска, этот метод возвращает только файлы, соответствующие указанному расширению файла. В следующей таблице показана аномалия в .NET Framework.

Файлы в каталоге Шаблон поиска возвращает .NET 5+ возвращает .NET Framework
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 не может заканчиваться двумя периодами ("..") или содержать два периода (".).), за которыми следует DirectorySeparatorChar или AltDirectorySeparatorCharне может содержать недопустимые символы. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

Можно указать относительные сведения о пути с параметром path . Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу GetCurrentDirectory , который можно определить с помощью метода.

Методы EnumerateFiles отличаются следующим образом: при использовании GetFilesможно начать перечисление коллекции имен до возврата всей коллекции. При использовании EnumerateFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву.GetFiles Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.

Возвращаемая коллекция не кэшируется. Каждый вызов GetEnumerator коллекции запускает новое перечисление.

Применяется к