DirectoryInfo.EnumerateDirectories 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回目前目錄中目錄資訊的可列舉集合。
多載
EnumerateDirectories(String, SearchOption) |
傳回符合指定之搜尋模式和搜尋子目錄選項的目錄資訊的可列舉集合。 |
EnumerateDirectories(String, EnumerationOptions) |
傳回符合所所指定搜尋模式和列舉選項之目錄資訊的可列舉集合。 |
EnumerateDirectories() |
傳回目前目錄中目錄資訊的可列舉集合。 |
EnumerateDirectories(String) |
傳回符合指定之搜尋模式的目錄資訊的可列舉集合。 |
EnumerateDirectories(String, SearchOption)
傳回符合指定之搜尋模式和搜尋子目錄選項的目錄資訊的可列舉集合。
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 MB 之檔案的名稱和大小。
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*” 會搜尋以字母 “s” 開頭的所有名稱 path
。
EnumerateDirectories和 GetDirectories 方法不同,如下所示:
當您使用 EnumerateDirectories時,可以在傳回整個集合之前,開始列舉 物件的集合 DirectoryInfo 。
當您使用 GetDirectories時,必須先等候傳回整個物件的陣列 DirectoryInfo ,才能存取陣列。
因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。
這個方法會預先填入下列 DirectoryInfo 屬性的值:
未快取傳回的集合;集合上方法的每個呼叫 GetEnumerator 都會啟動新的列舉。
適用於
EnumerateDirectories(String, EnumerationOptions)
傳回符合所所指定搜尋模式和列舉選項之目錄資訊的可列舉集合。
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*” 會搜尋以字母 “s” 開頭的所有名稱 path
。
EnumerateDirectories和 GetDirectories 方法不同,如下所示:
當您使用 EnumerateDirectories時,可以在傳回整個集合之前,開始列舉 物件的集合 DirectoryInfo 。
當您使用 GetDirectories時,必須先等候傳回整個物件的陣列 DirectoryInfo ,才能存取陣列。
因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。
這個方法會預先填入下列 DirectoryInfo 屬性的值:
未快取傳回的集合;集合上方法的每個呼叫 GetEnumerator 都會啟動新的列舉。
適用於
EnumerateDirectories()
傳回目前目錄中目錄資訊的可列舉集合。
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)
傳回符合指定之搜尋模式的目錄資訊的可列舉集合。
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*” 會搜尋以字母 “s” 開頭的所有名稱 path
。
EnumerateDirectories和 GetDirectories 方法不同,如下所示:
當您使用 EnumerateDirectories時,可以在傳回整個集合之前,開始列舉 物件的集合 DirectoryInfo 。
當您使用 GetDirectories時,必須先等候傳回整個物件的陣列 DirectoryInfo ,才能存取陣列。
因此,當您使用許多檔案和目錄時, EnumerateDirectories 可能會更有效率。
這個方法會預先填入下列 DirectoryInfo 屬性的值:
未快取傳回的集合;集合上方法的每個呼叫 GetEnumerator 都會啟動新的列舉。