Directory.GetDirectories 方法

定义

返回满足指定条件的子目录的名称。

重载

名称 说明
GetDirectories(String, String, SearchOption)

返回与指定目录中的指定搜索模式匹配的子目录(包括其路径)的名称,并选择性地搜索子目录。

GetDirectories(String, String, EnumerationOptions)

返回与指定目录中的指定搜索模式和枚举选项匹配的子目录(包括其路径)的名称。

GetDirectories(String, String)

返回与指定目录中的指定搜索模式匹配的子目录(包括其路径)的名称。

GetDirectories(String)

返回指定目录中的子目录(包括其路径)的名称。

GetDirectories(String, String, SearchOption)

Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs

返回与指定目录中的指定搜索模式匹配的子目录(包括其路径)的名称,并选择性地搜索子目录。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);
static member GetDirectories : string * string * System.IO.SearchOption -> string[]
Public Shared Function GetDirectories (path As String, searchPattern As String, searchOption As SearchOption) As String()

参数

path
String

要搜索的目录的相对路径或绝对路径。 此字符串不区分大小写。

searchPattern
String

要与中 path子目录的名称匹配的搜索字符串。 此参数可以包含有效文本和通配符的组合,但它不支持正则表达式。

searchOption
SearchOption

枚举值之一,指定搜索操作是应包括所有子目录还是仅包含当前目录。

返回

String[]

与指定条件匹配的子目录的完整名称(包括路径)的数组;如果未找到任何目录,则为空数组。

例外

低于 2.1 的 .NET Framework 和 .NET Core 版本: path 是长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 可以使用该方法 GetInvalidPathChars() 查询无效字符。

-或-

searchPattern 不包含有效的模式。

pathsearchPatternnull.

searchOption 不是有效 SearchOption 值。

调用方没有所需的权限。

指定的路径、文件名或两者都超过了系统定义的最大长度。

path 是文件名。

-或-

文件或目录已损坏且不可读(例如:FAT32 分区的第一个分配单元无效)。

指定的路径无效(例如,它位于未映射的驱动器上)。

示例

以下示例计算路径中以指定字母开头的目录数。 仅搜索顶级目录。

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            string[] dirs = Directory.GetDirectories(@"c:\", "p*", SearchOption.TopDirectoryOnly);
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);
            foreach (string dir in dirs)
            {
                Console.WriteLine(dir);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
open System.IO

try
    let dirs = Directory.GetDirectories(@"c:\", "p*", SearchOption.TopDirectoryOnly)
    printfn $"The number of directories starting with p is {dirs.Length}."
    for dir in dirs do
        printfn $"{dir}"
with e ->
    printfn $"The process failed: {e}"
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Try
            Dim dirs As String() = Directory.GetDirectories("c:\", "p*", SearchOption.TopDirectoryOnly)
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length)
            Dim dir As String
            For Each dir In dirs
                Console.WriteLine(dir)
            Next
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

注解

path 参数可以指定相对或绝对路径信息,并且不区分大小写。 相对路径信息解释为相对于当前工作目录。 若要获取当前工作目录,请参阅 GetCurrentDirectory

searchPattern 可以是文本字符和通配符的组合,但它不支持正则表达式。 允许在以下通配符说明符中 searchPattern

通配符说明符 Matches
* (星号) 该位置中的零个或多个字符。
? (问号) 该位置正好有一个字符。

通配符以外的字符是文本字符。 例如, searchPattern 字符串“*t”搜索以字母“t”结尾的所有名称 pathsearchPattern字符串“s*”搜索以字母“s”开头的所有名称path

searchPattern不能以两个句点(“..”)结尾,或者包含两个句点(“..”)后跟DirectorySeparatorCharAltDirectorySeparatorChar,也不能包含任何无效字符。 可以使用该方法 GetInvalidPathChars 查询无效字符。

方法和EnumerateDirectoriesGetDirectories方法有所不同:使用EnumerateDirectories时,可以在返回整个集合之前开始枚举名称集合;使用GetDirectories时,必须先等待返回整个名称数组,然后才能访问数组。 因此,处理许多文件和目录时, EnumerateDirectories 可以更高效。

有关常见 I/O 任务的列表,请参阅 常见 I/O 任务

另请参阅

适用于

GetDirectories(String, String, EnumerationOptions)

Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs

返回与指定目录中的指定搜索模式和枚举选项匹配的子目录(包括其路径)的名称。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member GetDirectories : string * string * System.IO.EnumerationOptions -> string[]
Public Shared Function GetDirectories (path As String, searchPattern As String, enumerationOptions As EnumerationOptions) As String()

参数

path
String

要搜索的目录的相对路径或绝对路径。 此字符串不区分大小写。

searchPattern
String

要与中 path子目录的名称匹配的搜索字符串。 此参数可以包含有效文本和通配符的组合,但它不支持正则表达式。

enumerationOptions
EnumerationOptions

描述要使用的搜索和枚举配置的对象。

返回

String[]

与指定目录中的搜索模式和枚举选项匹配的子目录的完整名称(包括路径)的数组;如果未找到任何目录,则为空数组。

例外

调用方没有所需的权限。

低于 2.1 的 .NET Framework 和 .NET Core 版本: path 是长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 可以使用 查询无效字符 GetInvalidPathChars()

-或-

searchPattern 不包含有效的模式。

pathsearchPatternnull.

指定的路径、文件名或两者都超过了系统定义的最大长度。

path 是文件名。

-或-

文件或目录已损坏且不可读(例如:FAT32 分区的第一个分配单元无效)。

指定的路径无效(例如,它位于未映射的驱动器上)。

注解

此方法直接返回与指定搜索模式匹配的指定目录下的所有子目录。 如果指定的目录没有子目录,或者没有子目录与参数匹配 searchPattern ,此方法将返回一个空数组。 仅搜索顶部目录。 如果要搜索子目录,请使用GetDirectories(String, String, SearchOption)该方法并在参数中AllDirectories指定searchOption

searchPattern 可以是文本字符和通配符的组合,但它不支持正则表达式。 允许在以下通配符说明符中 searchPattern

通配符说明符 Matches
* (星号) 该位置中的零个或多个字符。
? (问号) 该位置正好有一个字符。

通配符以外的字符是文本字符。 例如, searchPattern 字符串“*t”搜索以字母“t”结尾的所有名称 pathsearchPattern字符串“s*”搜索以字母“s”开头的所有名称path

searchPattern不能以两个句点(“..”)结尾,或者包含两个句点(“..”)后跟DirectorySeparatorCharAltDirectorySeparatorChar,也不能包含任何无效字符。 可以使用该方法 GetInvalidPathChars 查询无效字符。

path 参数可以指定相对或绝对路径信息,并且不区分大小写。 相对路径信息解释为相对于当前工作目录。 若要获取当前工作目录,请参阅 GetCurrentDirectory

方法和EnumerateDirectoriesGetDirectories方法有所不同:使用EnumerateDirectories时,可以在返回整个集合之前开始枚举名称集合;使用GetDirectories时,必须先等待返回整个名称数组,然后才能访问数组。 因此,处理许多文件和目录时, EnumerateDirectories 可以更高效。

有关常见 I/O 任务的列表,请参阅 常见 I/O 任务

适用于

GetDirectories(String, String)

Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs

返回与指定目录中的指定搜索模式匹配的子目录(包括其路径)的名称。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path, System::String ^ searchPattern);
public static string[] GetDirectories(string path, string searchPattern);
static member GetDirectories : string * string -> string[]
Public Shared Function GetDirectories (path As String, searchPattern As String) As String()

参数

path
String

要搜索的目录的相对路径或绝对路径。 此字符串不区分大小写。

searchPattern
String

要与中 path子目录的名称匹配的搜索字符串。 此参数可以包含有效文本和通配符的组合,但它不支持正则表达式。

返回

String[]

与指定目录中的搜索模式匹配的子目录的完整名称(包括路径)的数组;如果未找到任何目录,则为空数组。

例外

调用方没有所需的权限。

低于 2.1 的 .NET Framework 和 .NET Core 版本: path 是长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 可以使用 查询无效字符 GetInvalidPathChars()

-或-

searchPattern 不包含有效的模式。

pathsearchPatternnull.

指定的路径、文件名或两者都超过了系统定义的最大长度。

path 是文件名。

-或-

文件或目录已损坏且不可读(例如:FAT32 分区的第一个分配单元无效)。

指定的路径无效(例如,它位于未映射的驱动器上)。

示例

以下示例计算以指定字母开头的路径中的目录数。

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            // Only get subdirectories that begin with the letter "p."
            string[] dirs = Directory.GetDirectories(@"c:\", "p*");
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);
            foreach (string dir in dirs)
            {
                Console.WriteLine(dir);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
open System.IO

try
    // Only get subdirectories that begin with the letter "p."
    let dirs = Directory.GetDirectories(@"c:\", "p*")
    printfn $"The number of directories starting with p is {dirs.Length}."
    for dir in dirs do
        printfn $"{dir}"
with e ->
    printfn $"The process failed: {e}"
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Try
            ' Only get subdirectories that begin with the letter "p."
            Dim dirs As String() = Directory.GetDirectories("c:\", "p*")
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length)
            Dim dir As String
            For Each dir In dirs
                Console.WriteLine(dir)
            Next
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

注解

此方法直接返回与指定搜索模式匹配的指定目录下的所有子目录。 如果指定的目录没有子目录,或者没有子目录与参数匹配 searchPattern ,此方法将返回一个空数组。 仅搜索顶部目录。 如果要搜索子目录,请使用GetDirectories(String, String, SearchOption)该方法并在参数中AllDirectories指定searchOption

searchPattern 可以是文本字符和通配符的组合,但它不支持正则表达式。 允许在以下通配符说明符中 searchPattern

通配符说明符 Matches
* (星号) 该位置中的零个或多个字符。
? (问号) 该位置正好有一个字符。

通配符以外的字符是文本字符。 例如, searchPattern 字符串“*t”搜索以字母“t”结尾的所有名称 pathsearchPattern字符串“s*”搜索以字母“s”开头的所有名称path

searchPattern不能以两个句点(“..”)结尾,或者包含两个句点(“..”)后跟DirectorySeparatorCharAltDirectorySeparatorChar,也不能包含任何无效字符。 可以使用该方法 GetInvalidPathChars 查询无效字符。

path 参数可以指定相对或绝对路径信息,并且不区分大小写。 相对路径信息解释为相对于当前工作目录。 若要获取当前工作目录,请参阅 GetCurrentDirectory

方法和EnumerateDirectoriesGetDirectories方法有所不同:使用EnumerateDirectories时,可以在返回整个集合之前开始枚举名称集合;使用GetDirectories时,必须先等待返回整个名称数组,然后才能访问数组。 因此,处理许多文件和目录时, EnumerateDirectories 可以更高效。

有关常见 I/O 任务的列表,请参阅 常见 I/O 任务

另请参阅

适用于

GetDirectories(String)

Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs
Source:
Directory.cs

返回指定目录中的子目录(包括其路径)的名称。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path);
public static string[] GetDirectories(string path);
static member GetDirectories : string -> string[]
Public Shared Function GetDirectories (path As String) As String()

参数

path
String

要搜索的目录的相对路径或绝对路径。 此字符串不区分大小写。

返回

String[]

指定路径中子目录的完整名称(包括路径)的数组;如果未找到目录,则为空数组。

例外

调用方没有所需的权限。

低于 2.1 的 .NET Framework 和 .NET Core 版本: path 是长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 可以使用该方法 GetInvalidPathChars() 查询无效字符。

pathnull

指定的路径、文件名或两者都超过了系统定义的最大长度。

path 是文件名。

-或-

文件或目录已损坏且不可读(例如:FAT32 分区的第一个分配单元无效)。

指定的路径无效(例如,它位于未映射的驱动器上)。

示例

下面的示例采用命令行上的文件或目录名称数组,确定它的名称类型,并相应地处理它。

// For Directory.GetFiles and Directory.GetDirectories
// For File.Exists, Directory.Exists
using System;
using System.IO;
using System.Collections;

public class RecursiveFileProcessor
{
    public static void Main(string[] args)
    {
        foreach(string path in args)
        {
            if(File.Exists(path))
            {
                // This path is a file
                ProcessFile(path);
            }
            else if(Directory.Exists(path))
            {
                // This path is a directory
                ProcessDirectory(path);
            }
            else
            {
                Console.WriteLine("{0} is not a valid file or directory.", path);
            }
        }
    }

    // Process all files in the directory passed in, recurse on any directories
    // that are found, and process the files they contain.
    public static void ProcessDirectory(string targetDirectory)
    {
        // Process the list of files found in the directory.
        string [] fileEntries = Directory.GetFiles(targetDirectory);
        foreach(string fileName in fileEntries)
            ProcessFile(fileName);

        // Recurse into subdirectories of this directory.
        string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
            ProcessDirectory(subdirectory);
    }

    // Insert logic for processing found files here.
    public static void ProcessFile(string path)
    {
        Console.WriteLine("Processed file '{0}'.", path);	
    }
}
module RecursiveFileProcessor

open System.IO

// Insert logic for processing found files here.
let processFile path =
    printfn $"Processed file '%s{path}'."

// Process all files in the directory passed in, recurse on any directories
// that are found, and process the files they contain.
let rec processDirectory targetDirectory =
    // Process the list of files found in the directory.
    let fileEntries = Directory.GetFiles targetDirectory
    for fileName in fileEntries do
        processFile fileName

    // Recurse into subdirectories of this directory.
    let subdirectoryEntries = Directory.GetDirectories targetDirectory
    for subdirectory in subdirectoryEntries do
        processDirectory subdirectory

[<EntryPoint>]
let main args =
    for path in args do
        if File.Exists path then
            // This path is a file
            processFile path
        elif Directory.Exists path then
            // This path is a directory
            processDirectory path
        else
            printfn $"{path} is not a valid file or directory."
    0
' For Directory.GetFiles and Directory.GetDirectories
' For File.Exists, Directory.Exists 

Imports System.IO
Imports System.Collections

Public Class RecursiveFileProcessor

    Public Overloads Shared Sub Main(ByVal args() As String)
        Dim path As String
        For Each path In args
            If File.Exists(path) Then
                ' This path is a file.
                ProcessFile(path)
            Else
                If Directory.Exists(path) Then
                    ' This path is a directory.
                    ProcessDirectory(path)
                Else
                    Console.WriteLine("{0} is not a valid file or directory.", path)
                End If
            End If
        Next path
    End Sub


    ' Process all files in the directory passed in, recurse on any directories 
    ' that are found, and process the files they contain.
    Public Shared Sub ProcessDirectory(ByVal targetDirectory As String)
        Dim fileEntries As String() = Directory.GetFiles(targetDirectory)
        ' Process the list of files found in the directory.
        Dim fileName As String
        For Each fileName In fileEntries
            ProcessFile(fileName)

        Next fileName
        Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory)
        ' Recurse into subdirectories of this directory.
        Dim subdirectory As String
        For Each subdirectory In subdirectoryEntries
            ProcessDirectory(subdirectory)
        Next subdirectory

    End Sub

    ' Insert logic for processing found files here.
    Public Shared Sub ProcessFile(ByVal path As String)
        Console.WriteLine("Processed file '{0}'.", path)
    End Sub
End Class

注解

此方法与 GetDirectories(String, String) 星号指定为搜索模式的星号相同,因此它将返回所有子目录。 如果需要搜索子目录,请使用 GetDirectories(String, String, SearchOption) 该方法,这样就可以使用 searchOption 参数指定子目录的搜索。

方法和EnumerateDirectoriesGetDirectories方法有所不同:使用EnumerateDirectories时,可以在返回整个集合之前开始枚举名称集合;使用GetDirectories时,必须先等待返回整个名称数组,然后才能访问数组。 因此,处理许多文件和目录时, EnumerateDirectories 可以更高效。

path 参数可以指定相对路径或绝对路径信息。 相对路径信息解释为相对于当前工作目录。 若要获取当前工作目录,请参阅 GetCurrentDirectory

此方法返回的名称以目录中 path提供的目录信息为前缀。

参数的 path 区分大小写对应于运行代码的文件系统。 例如,它在 NTFS(默认 Windows 文件系统)上不区分大小写,在 Linux 文件系统上区分大小写。

有关常见 I/O 任务的列表,请参阅 常见 I/O 任务

另请参阅

适用于