Directory.GetDirectories 方法

定義

傳回符合指定準則之子目錄的名稱。

多載

GetDirectories(String, String, SearchOption)

傳回指定目錄中符合指定搜尋模式之子目錄 (包含其路徑) 的名稱,並且選擇性地搜尋子目錄。

GetDirectories(String, String, EnumerationOptions)

傳回所指定目錄中符合所指定搜尋模式與列舉選項的子目錄名稱 (包含其路徑)。

GetDirectories(String, String)

傳回指定目錄中符合指定搜尋模式的子目錄名稱 (包括檔案的路徑)。

GetDirectories(String)

傳回指定之目錄中的子目錄名稱 (包括其路徑)。

GetDirectories(String, String, SearchOption)

來源:
Directory.cs
來源:
Directory.cs
來源:
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[]

符合指定之準則的子目錄完整名稱 (包括路徑) 陣列,如果找不到任何目錄則為空陣列。

例外狀況

.NET Framework和 2.1 之前的 .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 允許下列萬用字元規範。

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

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

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

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

如需一般 I/O 工作的清單,請參閱 一般 I/O 工作

另請參閱

適用於

GetDirectories(String, String, EnumerationOptions)

來源:
Directory.cs
來源:
Directory.cs
來源:
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[]

在所指定目錄中,符合搜尋模式與列舉選項之子目錄完整名稱 (包含路徑) 的陣列,如果找不到任何目錄則為空陣列。

例外狀況

呼叫端沒有必要的權限。

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

-或-

searchPattern 不包含有效模式。

pathsearchPatternnull

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

path 為檔案名稱。

-或-

檔案或目錄已損毀且無法讀取 (範例:FAT32 分割區的第一個配置單位無效) 。

指定的路徑無效 (例如,它位於未對應的磁碟機上)。

備註

這個方法會直接在符合指定搜尋模式的指定目錄下傳回所有子目錄。 如果指定的目錄沒有子目錄,或沒有子目錄符合 searchPattern 參數,這個方法會傳回空陣列。 只會搜尋頂端目錄。 如果您想要搜尋子目錄,請使用 GetDirectories(String, String, SearchOption) 方法並在 參數中 searchOption 指定 AllDirectories

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

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

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

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

參數 path 可以指定相對路徑或絕對路徑資訊,而且不區分大小寫。 相對路徑資訊會解譯為相對於目前的工作目錄。 若要取得目前的工作目錄,請參閱 GetCurrentDirectory

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

如需一般 I/O 工作的清單,請參閱 一般 I/O 工作

適用於

GetDirectories(String, String)

來源:
Directory.cs
來源:
Directory.cs
來源:
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[]

指定目錄中,符合搜尋模式的子目錄完整名稱 (包括路徑) 陣列,如果找不到任何目錄則為空陣列。

例外狀況

呼叫端沒有必要的權限。

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

-或-

searchPattern 不包含有效模式。

pathsearchPatternnull

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

path 為檔案名稱。

-或-

檔案或目錄已損毀且無法讀取 (範例:FAT32 分割區) 的第一個配置單位無效。

指定的路徑無效 (例如,它位於未對應的磁碟機上)。

範例

下列範例會計算路徑中以指定字母開頭的目錄數目。

using namespace System;
using namespace System::IO;
int main()
{
   try
   {
      
      // Only get subdirectories that begin with the letter "p."
      array<String^>^dirs = Directory::GetDirectories( "c:\\", "p*" );
      Console::WriteLine( "The number of directories starting with p is {0}.", dirs->Length );
      Collections::IEnumerator^ myEnum = dirs->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Console::WriteLine( myEnum->Current );
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }

}
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) 方法並在 參數中 searchOption 指定 AllDirectories

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

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

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

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

參數 path 可以指定相對或絕對路徑資訊,而且不區分大小寫。 相對路徑資訊會解譯為相對於目前工作目錄。 若要取得目前的工作目錄,請參閱 GetCurrentDirectory

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

如需一般 I/O 工作的清單,請參閱 一般 I/O 工作

另請參閱

適用於

GetDirectories(String)

來源:
Directory.cs
來源:
Directory.cs
來源:
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[]

指定之路徑中的子目錄完整名稱 (包括路徑) 陣列,如果找不到任何目錄則為空陣列。

例外狀況

呼叫端沒有必要的權限。

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

pathnull

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

path 為檔案名稱。

-或-

檔案或目錄已損毀且無法讀取 (範例:FAT32 分割區) 的第一個配置單位無效。

指定的路徑無效 (例如,它位於未對應的磁碟機上)。

範例

下列範例會採用命令列上的檔案或目錄名稱陣列、判斷其名稱類型,並適當地處理它。

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

// Insert logic for processing found files here.
void ProcessFile( String^ path )
{
   Console::WriteLine( "Processed file '{0}'.", path );
}


// Process all files in the directory passed in, recurse on any directories 
// that are found, and process the files they contain.
void ProcessDirectory( String^ targetDirectory )
{
   
   // Process the list of files found in the directory.
   array<String^>^fileEntries = Directory::GetFiles( targetDirectory );
   IEnumerator^ files = fileEntries->GetEnumerator();
   while ( files->MoveNext() )
   {
      String^ fileName = safe_cast<String^>(files->Current);
      ProcessFile( fileName );
   }

   
   // Recurse into subdirectories of this directory.
   array<String^>^subdirectoryEntries = Directory::GetDirectories( targetDirectory );
   IEnumerator^ dirs = subdirectoryEntries->GetEnumerator();
   while ( dirs->MoveNext() )
   {
      String^ subdirectory = safe_cast<String^>(dirs->Current);
      ProcessDirectory( subdirectory );
   }
}

int main( int argc, char *argv[] )
{
   for ( int i = 1; i < argc; i++ )
   {
      String^ path = gcnew String(argv[ i ]);
      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 );
      }

   }
}
// 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 工作

另請參閱

適用於