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


DirectoryInfo.EnumerateDirectories Метод

Определение

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

Перегрузки

EnumerateDirectories(String, SearchOption)

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

EnumerateDirectories(String, EnumerationOptions)

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

EnumerateDirectories()

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

EnumerateDirectories(String)

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

EnumerateDirectories(String, SearchOption)

Исходный код:
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

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

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

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

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

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

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 коллекции будет запускать новое перечисление.

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