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