Поделиться через


DirectoryInfo.EnumerateDirectories Метод

Определение

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

Перегрузки

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

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

EnumerateDirectories(String, EnumerationOptions)

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

EnumerateDirectories()

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

EnumerateDirectories(String)

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

EnumerateDirectories(String, SearchOption)

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

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

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

Параметры

searchPattern
String

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

searchOption
SearchOption

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

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

Перечисленная коллекция каталогов, которые соответствуют searchPattern и searchOption.

Исключения

searchPattern равно null.

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

Путь, инкапсулированный в DirectoryInfo объекте, недопустим (например, он находится на несопоставленном диске).

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

Примеры

В следующем примере используется этот метод и EnumerateFiles метод для перечисления файлов и каталогов в начальном каталоге и отображения имени и размера всех файлов более 10 МБ.

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // Set a variable to the My Documents path.
        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        DirectoryInfo diTop = new DirectoryInfo(docPath);

        try
        {
            foreach (var fi in diTop.EnumerateFiles())
            {
                try
                {
                    // Display each file over 10 MB.
                    if (fi.Length > 10000000)
                    {
                        Console.WriteLine($"{fi.FullName}\t\t{fi.Length:N0}");
                    }
                }
                catch (UnauthorizedAccessException unAuthTop)
                {
                    Console.WriteLine($"{unAuthTop.Message}");
                }
            }

            foreach (var di in diTop.EnumerateDirectories("*"))
            {
                try
                {
                    foreach (var fi in di.EnumerateFiles("*", SearchOption.AllDirectories))
                    {
                        try
                        {
                            // Display each file over 10 MB.
                            if (fi.Length > 10000000)
                            {
                                Console.WriteLine($"{fi.FullName}\t\t{fi.Length:N0}");
                            }
                        }
                        catch (UnauthorizedAccessException unAuthFile)
                        {
                            Console.WriteLine($"unAuthFile: {unAuthFile.Message}");
                        }
                    }
                }
                catch (UnauthorizedAccessException unAuthSubDir)
                {
                    Console.WriteLine($"unAuthSubDir: {unAuthSubDir.Message}");
                }
            }
        }
        catch (DirectoryNotFoundException dirNotFound)
        {
            Console.WriteLine($"{dirNotFound.Message}");
        }
        catch (UnauthorizedAccessException unAuthDir)
        {
            Console.WriteLine($"unAuthDir: {unAuthDir.Message}");
        }
        catch (PathTooLongException longPath)
        {
            Console.WriteLine($"{longPath.Message}");
        }
    }
}
open System
open System.IO

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

let diTop = DirectoryInfo docPath

try
    for fi in diTop.EnumerateFiles() do
        try
            // Display each file over 10 MB.
            if fi.Length > 10000000 then
                printfn $"{fi.FullName}\t\t{fi.Length:N0}"
        with :? UnauthorizedAccessException as unAuthTop ->
            printfn $"{unAuthTop.Message}"

    for di in diTop.EnumerateDirectories "*" do
        try
            for fi in di.EnumerateFiles("*", SearchOption.AllDirectories) do
                try
                    // Display each file over 10 MB.
                    if fi.Length > 10000000 then
                        printfn $"{fi.FullName}\t\t{fi.Length:N0}"
                with :? UnauthorizedAccessException as unAuthFile ->
                    printfn $"unAuthFile: {unAuthFile.Message}"
        with :? UnauthorizedAccessException as unAuthSubDir ->
            printfn $"unAuthSubDir: {unAuthSubDir.Message}"
with
| :? DirectoryNotFoundException as dirNotFound ->
    Console.WriteLine($"{dirNotFound.Message}")
| :? UnauthorizedAccessException as unAuthDir ->
    printfn $"unAuthDir: {unAuthDir.Message}"
| :? PathTooLongException as longPath ->
    printfn $"{longPath.Message}"
Imports System.IO

Class Program
    Public Shared Sub Main(ByVal args As String())
        Dim dirPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
        Dim diTop As New DirectoryInfo(dirPath)
        Try
            For Each fi In diTop.EnumerateFiles()
                Try
                    ' Display each file over 10 MB;
                    If fi.Length > 10000000 Then
                        Console.WriteLine("{0}" & vbTab & vbTab & "{1}", fi.FullName, fi.Length.ToString("N0"))
                    End If
                Catch unAuthTop As UnauthorizedAccessException
                    Console.WriteLine($"{unAuthTop.Message}")
                End Try
            Next

            For Each di In diTop.EnumerateDirectories("*")
                Try
                    For Each fi In di.EnumerateFiles("*", SearchOption.AllDirectories)
                        Try
                            ' // Display each file over 10 MB;
                            If fi.Length > 10000000 Then
                                Console.WriteLine("{0}" & vbTab &
                                vbTab & "{1}", fi.FullName, fi.Length.ToString("N0"))
                            End If
                        Catch unAuthFile As UnauthorizedAccessException
                            Console.WriteLine($"unAuthFile: {unAuthFile.Message}")
                        End Try
                    Next
                Catch unAuthSubDir As UnauthorizedAccessException
                    Console.WriteLine($"unAuthSubDir: {unAuthSubDir.Message}")
                End Try
            Next
        Catch dirNotFound As DirectoryNotFoundException
            Console.WriteLine($"{dirNotFound.Message}")
        Catch unAuthDir As UnauthorizedAccessException
            Console.WriteLine($"unAuthDir: {unAuthDir.Message}")
        Catch longPath As PathTooLongException
            Console.WriteLine($"{longPath.Message}")
        End Try
    End Sub
End Class

Комментарии

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

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

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

Методы EnumerateDirectories и GetDirectories отличаются следующим образом:

  • При использовании EnumerateDirectoriesможно начать перечисление коллекции DirectoryInfo объектов до возврата всей коллекции.

  • При использовании GetDirectoriesнеобходимо дождаться возврата всего массива DirectoryInfo объектов, прежде чем получить доступ к массиву.

Поэтому при работе с большим количеством файлов и каталогов EnumerateDirectories может быть более эффективным.

Этот метод предварительно заполняет значения следующих DirectoryInfo свойств:

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

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

EnumerateDirectories(String, EnumerationOptions)

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

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

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

Параметры

searchPattern
String

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

enumerationOptions
EnumerationOptions

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

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

Перечисленная коллекция каталогов, которые соответствуют searchPattern и enumerationOptions.

Исключения

searchPattern равно null.

Путь, инкапсулированный в DirectoryInfo объекте, недопустим (например, он находится на несопоставленном диске).

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

Комментарии

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

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

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

Методы EnumerateDirectories и GetDirectories отличаются следующим образом:

  • При использовании EnumerateDirectoriesможно начать перечисление коллекции DirectoryInfo объектов до возврата всей коллекции.

  • При использовании GetDirectoriesнеобходимо дождаться возврата всего массива DirectoryInfo объектов, прежде чем получить доступ к массиву.

Поэтому при работе с большим количеством файлов и каталогов EnumerateDirectories может быть более эффективным.

Этот метод предварительно заполняет значения следующих DirectoryInfo свойств:

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

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

EnumerateDirectories()

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

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

public:
 System::Collections::Generic::IEnumerable<System::IO::DirectoryInfo ^> ^ EnumerateDirectories();
public System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo> EnumerateDirectories();
member this.EnumerateDirectories : unit -> seq<System.IO.DirectoryInfo>
Public Function EnumerateDirectories () As IEnumerable(Of DirectoryInfo)

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

Перечисленная коллекция каталогов в текущем каталоге.

Исключения

Путь, инкапсулированный в DirectoryInfo объекте, недопустим (например, он находится на несопоставленном диске).

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

Примеры

В следующем примере перечисляются подкаталоги в каталоге C:\Program Files и используется запрос LINQ для возврата имен всех каталогов, созданных до 2009 года, путем проверки значения CreationTimeUtc свойства.

Если вам нужны только имена подкаталогов, используйте статический Directory класс для повышения производительности. Пример см. в методе EnumerateDirectories(String) .

using System;
using System.IO;

namespace EnumDir
{
    class Program
    {
        static void Main(string[] args)
        {
            // Set a variable to the Documents path.
            string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            DirectoryInfo dirPrograms = new DirectoryInfo(docPath);
            DateTime StartOf2009 = new DateTime(2009, 01, 01);

            var dirs = from dir in dirPrograms.EnumerateDirectories()
            where dir.CreationTimeUtc > StartOf2009
            select new
            {
                ProgDir = dir,
            };

            foreach (var di in dirs)
            {
                Console.WriteLine($"{di.ProgDir.Name}");
            }
        }
    }
}
// </Snippet1>
module program

// <Snippet1>
open System
open System.IO

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

let dirPrograms = DirectoryInfo docPath
let startOf2009 = DateTime(2009, 01, 01)

let dirs =
    query {
        for dir in dirPrograms.EnumerateDirectories() do
        where (dir.CreationTimeUtc > startOf2009)
        select {| ProgDir = dir |}
    }

for di in dirs do
    printfn $"{di.ProgDir.Name}"
// </Snippet1>
Imports System.IO

Module Module1

    Sub Main()

        Dim dirPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
        Dim dirPrograms As New DirectoryInfo(dirPath)
        Dim StartOf2009 As New DateTime(2009, 1, 1)

        Dim dirs = From dir In dirPrograms.EnumerateDirectories()
                   Where dir.CreationTimeUtc > StartOf2009

        For Each di As DirectoryInfo In dirs
            Console.WriteLine("{0}", di.Name)
        Next

    End Sub

End Module

Комментарии

Методы EnumerateDirectories и GetDirectories отличаются следующим образом:

  • При использовании EnumerateDirectoriesможно начать перечисление коллекции DirectoryInfo объектов до возврата всей коллекции.

  • При использовании GetDirectoriesнеобходимо дождаться возврата всего массива DirectoryInfo объектов, прежде чем получить доступ к массиву.

Поэтому при работе с большим количеством файлов и каталогов EnumerateDirectories может быть более эффективным.

Этот метод предварительно заполняет значения следующих DirectoryInfo свойств:

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

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

EnumerateDirectories(String)

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

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

public:
 System::Collections::Generic::IEnumerable<System::IO::DirectoryInfo ^> ^ EnumerateDirectories(System::String ^ searchPattern);
public System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo> EnumerateDirectories(string searchPattern);
member this.EnumerateDirectories : string -> seq<System.IO.DirectoryInfo>
Public Function EnumerateDirectories (searchPattern As String) As IEnumerable(Of DirectoryInfo)

Параметры

searchPattern
String

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

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

Перечисленная коллекция каталогов, которые соответствуют searchPattern.

Исключения

searchPattern равно null.

Путь, инкапсулированный в DirectoryInfo объекте, недопустим (например, он находится на несопоставленном диске).

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

Комментарии

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

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

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

Методы EnumerateDirectories и GetDirectories отличаются следующим образом:

  • При использовании EnumerateDirectoriesможно начать перечисление коллекции DirectoryInfo объектов до возврата всей коллекции.

  • При использовании GetDirectoriesнеобходимо дождаться возврата всего массива DirectoryInfo объектов, прежде чем получить доступ к массиву.

Поэтому при работе с большим количеством файлов и каталогов EnumerateDirectories может быть более эффективным.

Этот метод предварительно заполняет значения следующих DirectoryInfo свойств:

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

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