Directory.EnumerateDirectories 方法

定義

傳回符合指定準則之目錄全名的可列舉集合。

多載

EnumerateDirectories(String)

傳回指定路徑中目錄全名的可列舉集合。

EnumerateDirectories(String, String)

傳回指定路徑中符合搜尋模式之目錄全名的可列舉集合。

EnumerateDirectories(String, String, EnumerationOptions)

傳回在所指定路徑中符合搜尋模式之目錄完整名稱的可列舉集合,並選擇性地搜尋子目錄。

EnumerateDirectories(String, String, SearchOption)

傳回指定路徑中符合搜尋模式之目錄全名的可列舉集合,並選擇性地搜尋子目錄。

EnumerateDirectories(String)

來源:
Directory.cs
來源:
Directory.cs
來源:
Directory.cs

傳回指定路徑中目錄全名的可列舉集合。

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateDirectories(System::String ^ path);
public static System.Collections.Generic.IEnumerable<string> EnumerateDirectories (string path);
static member EnumerateDirectories : string -> seq<string>
Public Shared Function EnumerateDirectories (path As String) As IEnumerable(Of String)

參數

path
String

要搜尋之目錄的相對或絕對路徑。 這個字串不會區分大小寫。

傳回

path 指定的目錄中,目錄完整名稱 (包括路徑) 的可列舉集合。

例外狀況

.NET Framework和 2.1 之前的 .NET Core 版本: path 是長度為零的字串、只包含空白字元,或包含不正確字元。 您可以使用 GetInvalidPathChars() 方法查詢無效字元。

pathnull

path 無效,例如參考到未對應的磁碟機。

path 為檔案名稱。

指定的路徑、檔案名稱,或兩者合計超出系統定義的長度上限。

呼叫端沒有必要的權限。

呼叫端沒有必要的權限。

範例

下列範例會列舉指定路徑中的最上層目錄。

using System;
using System.Collections.Generic;
using System.IO;

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

            List<string> dirs = new List<string>(Directory.EnumerateDirectories(docPath));

            foreach (var dir in dirs)
            {
                Console.WriteLine($"{dir.Substring(dir.LastIndexOf(Path.DirectorySeparatorChar) + 1)}");
            }
            Console.WriteLine($"{dirs.Count} directories found.");
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine(ex.Message);
        }
        catch (PathTooLongException 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

    let dirs = Directory.EnumerateDirectories docPath |> Seq.toList

    for dir in dirs do
        printfn $"{dir.Substring(dir.LastIndexOf Path.DirectorySeparatorChar + 1)}"
    printfn $"{dirs.Length} directories found."

with
| :? UnauthorizedAccessException as ex ->
    printfn $"{ex.Message}"
| :? PathTooLongException as ex ->
    printfn $"{ex.Message}"
Imports System.Collections.Generic
Imports System.IO

Module Module1

    Sub Main()
        Try
            Dim dirPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

            Dim dirs As List(Of String) = New List(Of String)(Directory.EnumerateDirectories(dirPath))

            For Each folder In dirs
                Console.WriteLine($"{dir.Substring(dir.LastIndexOf(Path.DirectorySeparatorChar) + 1)}")
            Next
            Console.WriteLine($"{dirs.Count} directories found.")
        Catch ex As UnauthorizedAccessException
            Console.WriteLine(ex.Message)
        Catch ex As PathTooLongException
            Console.WriteLine(ex.Message)
        End Try

    End Sub
End Module

備註

您可以在 參數中 path 指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前的工作目錄,您可以使用 方法來判斷 GetCurrentDirectory 。 傳回的目錄名稱前面會加上您在 參數中 path 提供的值。 例如,如果您在 參數中 path 提供相對路徑,傳回的目錄名稱將包含相對路徑。

EnumerateDirectoriesGetDirectories 方法會如下所示:當您使用 EnumerateDirectories 時,可以在傳回整個集合之前開始列舉名稱集合;當您使用 GetDirectories 時,必須先等候傳回整個名稱陣列,才能存取陣列。 因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。

未快取傳回的集合;集合上的 每個呼叫 GetEnumerator 都會啟動新的列舉。

適用於

EnumerateDirectories(String, String)

來源:
Directory.cs
來源:
Directory.cs
來源:
Directory.cs

傳回指定路徑中符合搜尋模式之目錄全名的可列舉集合。

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateDirectories(System::String ^ path, System::String ^ searchPattern);
public static System.Collections.Generic.IEnumerable<string> EnumerateDirectories (string path, string searchPattern);
static member EnumerateDirectories : string * string -> seq<string>
Public Shared Function EnumerateDirectories (path As String, searchPattern As String) As IEnumerable(Of String)

參數

path
String

要搜尋之目錄的相對或絕對路徑。 這個字串不會區分大小寫。

searchPattern
String

要比對 path 中目錄名稱的搜尋字串。 這個參數可以包含有效常值路徑與萬用 (* 和 ?) 字元的組合,但是不支援規則運算式。

傳回

path 指定的目錄中,符合指定搜尋模式的目錄完整名稱 (包括路徑) 的可列舉集合。

例外狀況

.NET Framework和 2.1 之前的 .NET Core 版本: path 是長度為零的字串、只包含空白字元,或包含不正確字元。 您可以使用 GetInvalidPathChars() 方法查詢無效字元。

-或-

searchPattern 不包含有效模式。

pathnull

-或-

searchPatternnull

path 無效,例如參考到未對應的磁碟機。

path 為檔案名稱。

指定的路徑、檔案名稱,或兩者合計超出系統定義的長度上限。

呼叫端沒有必要的權限。

呼叫端沒有必要的權限。

範例

下列範例會列舉指定路徑中符合指定搜尋模式的最上層目錄。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class Program
{

    private static void Main(string[] args)
    {
        try
        {
            string dirPath = @"\\archives\2009\reports";

            // LINQ query.
            var dirs = from dir in
                     Directory.EnumerateDirectories(dirPath, "dv_*")
                       select dir;

            // Show results.
            foreach (var dir in dirs)
            {
                // Remove path information from string.
                Console.WriteLine("{0}",
                    dir.Substring(dir.LastIndexOf("\\") + 1));
            }
            Console.WriteLine("{0} directories found.",
                dirs.Count<string>().ToString());

            // Optionally create a List collection.
            List<string> workDirs = new List<string>(dirs);
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
open System
open System.IO

try
    let dirPath = @"\\archives\2009\reports"

    let dirs = 
        Directory.EnumerateDirectories(dirPath, "dv_*")
        |> Seq.cache

    // Show results.
    for dir in dirs do
        // Remove path information from string.
        printfn $"{dir.Substring(dir.LastIndexOf '\\' + 1)}"
    printfn $"{Seq.length dirs} directories found."

    // Optionally create a list collection.
    let workDirs = Seq.toList dirs
    ()
    
with 
| :? UnauthorizedAccessException as uaEx ->
    printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
    printfn $"{pathEx.Message}"
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq

Module Module1

    Sub Main()
        Try
            Dim dirPath As String = "\\archives\2009\reports"

            ' LINQ query.
            Dim dirs = From folder In _
                Directory.EnumerateDirectories(dirPath, "dv_*")
            For Each folder In dirs
                ' Remove path infomration from string.
                Console.WriteLine("{0}", _
                        folder.Substring(folder.LastIndexOf("\") + 1))
            Next
            Console.WriteLine("{0} directories found.", _
                dirs.Count.ToString())

            ' Optionally create a List collection.
            Dim workDirs As List(Of String) = New List(Of String)

        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try
    End Sub
End Module

備註

searchPattern 可以是常值和萬用字元的組合,但不支援正則運算式。 在 中 searchPattern 允許下列萬用字元規範。

萬用字元規範 相符項
* (星號) 該位置中的零或多個字元。
? (問號) 該位置中只有一個字元。

萬用字元以外的字元是常值字元。 例如, searchPattern 字串 「*t」 會搜尋以字母 「t」 結尾的所有名稱 path 。 字串 「s*」 會 searchPattern 以字母 「s」 開頭搜尋所有名稱 path

searchPattern 不能以兩個句點結尾 (「。」) 或包含兩個句點 (「.」。) 後面接著 DirectorySeparatorCharAltDirectorySeparatorChar ,也無法包含任何不正確字元。 您可以使用 GetInvalidPathChars 方法查詢無效字元。

您可以在 參數中 path 指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前的工作目錄,您可以使用 方法來判斷 GetCurrentDirectory 。 傳回的目錄名稱前面會加上您在 參數中 path 提供的值。 例如,如果您在 參數中 path 提供相對路徑,傳回的目錄名稱將包含相對路徑。

EnumerateDirectoriesGetDirectories 方法會如下所示:當您使用 EnumerateDirectories 時,可以在傳回整個集合之前開始列舉名稱集合;當您使用 GetDirectories 時,必須先等候傳回整個名稱陣列,才能存取陣列。 因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。

未快取傳回的集合;集合上的 每個呼叫 GetEnumerator 都會啟動新的列舉。

適用於

EnumerateDirectories(String, String, EnumerationOptions)

來源:
Directory.cs
來源:
Directory.cs
來源:
Directory.cs

傳回在所指定路徑中符合搜尋模式之目錄完整名稱的可列舉集合,並選擇性地搜尋子目錄。

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

參數

path
String

要搜尋之目錄的相對或絕對路徑。 這個字串不會區分大小寫。

searchPattern
String

要比對 path 中目錄名稱的搜尋字串。 這個參數可以包含有效常值路徑與萬用 (* 和 ?) 字元的組合,但是不支援規則運算式。

enumerationOptions
EnumerationOptions

物件,描述要使用的搜尋和列舉組態。

傳回

path 指定的目錄中,且符合所指定搜尋模式與列舉選項之目錄完整名稱 (包含路徑) 的可列舉集合。

例外狀況

.NET Framework和 2.1 之前的 .NET Core 版本: path 是長度為零的字串、只包含空白字元,或包含不正確字元。 您可以使用 GetInvalidPathChars() 方法查詢無效字元。

-或-

searchPattern 不包含有效模式。

pathsearchPatternnull

searchOption 不是有效的 SearchOption 值。

path 無效,例如參考到未對應的磁碟機。

path 為檔案名稱。

指定的路徑、檔案名稱,或兩者合計超出系統定義的長度上限。

呼叫端沒有必要的權限。

呼叫端沒有必要的權限。

備註

searchPattern 可以是常值和萬用字元的組合,但不支援正則運算式。 在 中 searchPattern 允許下列萬用字元規範。

萬用字元規範 相符項
* (星號) 該位置中的零或多個字元。
? (問號) 該位置中只有一個字元。

萬用字元以外的字元是常值字元。 例如, searchPattern 字串 「*t」 會搜尋以字母 「t」 結尾的所有名稱 path 。 字串 「s*」 會 searchPattern 以字母 「s」 開頭搜尋所有名稱 path

searchPattern 不能以兩個句點結尾 (「。」) 或包含兩個句點 (「.」。) 後面接著 DirectorySeparatorCharAltDirectorySeparatorChar ,也無法包含任何不正確字元。 您可以使用 GetInvalidPathChars 方法查詢無效字元。

您可以在 參數中 path 指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前工作目錄,您可以使用 方法來判斷 GetCurrentDirectory 。 傳回的目錄名稱前面會加上您在 參數中 path 提供的值。 例如,如果您在 參數中 path 提供相對路徑,傳回的目錄名稱將包含相對路徑。

EnumerateDirectoriesGetDirectories 方法不同,如下所示:當您使用 EnumerateDirectories 時,可以在傳回整個集合之前開始列舉名稱的集合;當您使用 GetDirectories 時,必須先等候傳回整個名稱陣列,才能存取陣列。 因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。

未快取傳回的集合;集合上的 每個呼叫 GetEnumerator 都會啟動新的列舉。

適用於

EnumerateDirectories(String, String, SearchOption)

來源:
Directory.cs
來源:
Directory.cs
來源:
Directory.cs

傳回指定路徑中符合搜尋模式之目錄全名的可列舉集合,並選擇性地搜尋子目錄。

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

參數

path
String

要搜尋之目錄的相對或絕對路徑。 這個字串不會區分大小寫。

searchPattern
String

要比對 path 中目錄名稱的搜尋字串。 這個參數可以包含有效常值路徑與萬用 (* 和 ?) 字元的組合,但是不支援規則運算式。

searchOption
SearchOption

其中一個列舉值,該值會指定搜尋作業應該只包含目前目錄還是包含所有子目錄。 預設值是 TopDirectoryOnly

傳回

path 指定的目錄中,且符合所指定搜尋模式與搜尋選項之目錄完整名稱 (包含路徑) 的可列舉集合。

例外狀況

.NET Framework和 2.1 之前的 .NET Core 版本: path 是長度為零的字串、只包含空白字元,或包含無效字元。 您可以使用 GetInvalidPathChars() 方法查詢無效字元。

-或-

searchPattern 不包含有效模式。

pathnull

-或-

searchPatternnull

searchOption 不是有效的 SearchOption 值。

path 無效,例如參考到未對應的磁碟機。

path 為檔案名稱。

指定的路徑、檔案名稱,或兩者合計超出系統定義的長度上限。

呼叫端沒有必要的權限。

呼叫端沒有必要的權限。

範例

下列範例會列舉符合指定搜尋模式之指定路徑中的目錄。 它會使用 searchOption 參數來指定搜尋中應包含所有子目錄。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class Program
{

    private static void Main(string[] args)
    {
        try
        {
            string dirPath = @"\\archives\2009\reports";

            // LINQ query.
            var dirs = from dir in
                     Directory.EnumerateDirectories(dirPath, "dv_*",
                        SearchOption.AllDirectories)
                       select dir;

            // Show results.
            foreach (var dir in dirs)
            {
                // Remove path information from string.
                Console.WriteLine("{0}",
                    dir.Substring(dir.LastIndexOf("\\") + 1));
            }
            Console.WriteLine("{0} directories found.",
                dirs.Count<string>().ToString());

            // Optionally create a List collection.
            List<string> workDirs = new List<string>(dirs);
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
open System
open System.IO

try
    let dirPath = @"\\archives\2009\reports"

    let dirs =
        Directory.EnumerateDirectories(dirPath, "dv_*", SearchOption.AllDirectories)
        |> Seq.cache

    // Show results.
    for dir in dirs do
        // Remove path information from string.
        printfn $"{dir.Substring(dir.LastIndexOf '\\' + 1)}"
    printfn $"{Seq.length dirs} directories found."

    // Optionally create a List collection.
    let workDirs = Seq.toList dirs
    ()

with 
| :? UnauthorizedAccessException as uaEx ->
    printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
    printfn $"{pathEx.Message}"
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq

Module Module1

    Sub Main()
        Try
            Dim dirPath As String = "\\archives\2009\reports"

            ' LINQ query.
            Dim dirs = From folder In _
                Directory.EnumerateDirectories(dirPath, "dv_*", _
                    SearchOption.AllDirectories)
            For Each folder In dirs
                ' Remove path infomration from string.
                Console.WriteLine("{0}", _
                        folder.Substring(folder.LastIndexOf("\") + 1))
            Next
            Console.WriteLine("{0} directories found.", _
                dirs.Count.ToString())

            ' Optionally create a List collection.
            Dim workDirs As List(Of String) = New List(Of String)

        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try
    End Sub
End Module

備註

searchPattern 可以是常值和萬用字元的組合,但不支援正則運算式。 在 中 searchPattern 允許下列萬用字元規範。

萬用字元規範 相符項
* (星號) 該位置中的零或多個字元。
? (問號) 該位置中只有一個字元。

萬用字元以外的字元是常值字元。 例如, searchPattern 字串 「*t」 會搜尋以字母 「t」 結尾的所有名稱 path 。 字串 searchPattern 「s*」 會搜尋以字母 「s」 開頭的所有名稱 path

searchPattern 不能以兩個句號結尾 (」。」) 或包含兩個 (句點」。」) 後面 DirectorySeparatorChar 接著 或 AltDirectorySeparatorChar ,也無法包含任何無效字元。 您可以使用 GetInvalidPathChars 方法查詢無效字元。

您可以在 參數中 path 指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前工作目錄,您可以使用 方法來判斷 GetCurrentDirectory 。 傳回的目錄名稱前面會加上您在 參數中 path 提供的值。 例如,如果您在 參數中 path 提供相對路徑,傳回的目錄名稱將包含相對路徑。

EnumerateDirectoriesGetDirectories 方法不同,如下所示:當您使用 EnumerateDirectories 時,可以在傳回整個集合之前開始列舉名稱的集合;當您使用 GetDirectories 時,必須先等候傳回整個名稱陣列,才能存取陣列。 因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。

未快取傳回的集合;集合上的 每個呼叫 GetEnumerator 都會啟動新的列舉。

適用於