共用方式為


Directory.EnumerateFiles 方法

定義

傳回符合指定準則之完整檔名的可列舉集合。

多載

EnumerateFiles(String, String, SearchOption)

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

EnumerateFiles(String, String, EnumerationOptions)

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

EnumerateFiles(String)

傳回指定路徑中完整檔名的可列舉集合。

EnumerateFiles(String, String)

傳回指定路徑中符合搜尋模式之完整檔名的可列舉集合。

EnumerateFiles(String, String, SearchOption)

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

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

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern, System.IO.SearchOption searchOption);
static member EnumerateFiles : string * string * System.IO.SearchOption -> seq<string>
Public Shared Function EnumerateFiles (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 為檔案名稱。

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

呼叫端沒有必要的權限。

呼叫端沒有必要的權限。

範例

下列範例示範如何擷取目錄及其子目錄中的所有文本檔,並將其移至新的目錄。 移動檔案之後,檔案就不再存在於原始目錄中。

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories);

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
    printfn $"{e.Message}"
Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub

End Module

下列範例會以遞歸方式列舉擴展名 .txt為 的所有檔案、讀取檔案的每一行,如果它包含字串 “Microsoft”,則會顯示該行。

using System;
using System.IO;
using System.Linq;

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

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine($"{f.File}\t{f.Line}");
            }
            Console.WriteLine($"{files.Count().ToString()} files found.");
        }
        catch (UnauthorizedAccessException uAEx)
        {
            Console.WriteLine(uAEx.Message);
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
    }
}
open System
open System.IO

try
    // Set a variable to the My Documents path.
    let docPath =
        Environment.GetFolderPath Environment.SpecialFolder.MyDocuments

    let files =
        query {
            for file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories) do
            for line in File.ReadLines file do
            where (line.Contains "Microsoft")
            select {| File = file; Line = line |}
        }

    for f in files do
        printfn $"{f.File}\t{f.Line}"
    printfn $"{Seq.length files} files found."

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

Module Module1

    Sub Main()
        Try
            Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        From line In File.ReadLines(chkFile)
                        Where line.Contains("Microsoft")
                        Select New With {.curFile = chkFile, .curLine = line}

            For Each f In files
                Console.WriteLine($"{f.File}\t{f.Line}")
            Next
            Console.WriteLine($"{files.Count} files found.")
        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

注意

僅限 .NET Framework:當您在 searchPattern 中使用星號通配符,並指定三個字元擴展名時,例如 “*.txt”,此方法也會傳回擴展名開頭為指定擴展名的檔案。 例如,搜尋模式 「*.xls」 會同時傳回 「book.xls」 和 「book.xlsx」。 只有在搜尋模式中使用星號,且提供的擴展名剛好是三個字元時,才會發生此行為。 如果您在搜尋模式的某處使用問號通配符,此方法只會傳回完全符合指定擴展名的檔案。 下表描述 .NET Framework 中的這個異常狀況。

目錄中的檔案 搜尋模式 .NET 5+ 傳回 .NET Framework 傳回
file.ai,file.aif *。艾 file.ai file.ai
book.xls,book.xlsx *.xls book.xls book.xls,book.xlsx
ello.txt、hello.txt、hello.txtt ?ello.txt hello.txt hello.txt

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

您可以使用 參數指定相對路徑資訊 path 。 相對路徑資訊會解譯為相對於目前工作目錄,您可以使用 方法來判斷 GetCurrentDirectory

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

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

適用於

EnumerateFiles(String, String, EnumerationOptions)

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

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

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member EnumerateFiles : string * string * System.IO.EnumerationOptions -> seq<string>
Public Shared Function EnumerateFiles (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 不包含有效模式。

pathnull

-或-

searchPatternnull

searchOption 不是有效的 SearchOption 值。

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

path 為檔案名稱。

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

呼叫端沒有必要的權限。

備註

searchPattern 可以是常值和通配符的組合,但不支援正則表達式。 在中 searchPattern允許下列通配符規範。

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

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

注意

僅限 .NET Framework:當您在 searchPattern 中使用星號通配符,並指定三個字元擴展名時,例如 “*.txt”,此方法也會傳回擴展名開頭為指定擴展名的檔案。 例如,搜尋模式 「*.xls」 會同時傳回 「book.xls」 和 「book.xlsx」。 只有在搜尋模式中使用星號,且提供的擴展名剛好是三個字元時,才會發生此行為。 如果您在搜尋模式的某處使用問號通配符,此方法只會傳回完全符合指定擴展名的檔案。 下表描述 .NET Framework 中的這個異常。

目錄中的檔案 搜尋模式 .NET 5+ 傳回 .NET Framework 傳回
file.ai,file.aif *。艾 file.ai file.ai
book.xls,book.xlsx *.xls book.xls book.xls,book.xlsx
ello.txt、hello.txt、hello.txtt ?ello.txt hello.txt hello.txt

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

您可以使用 參數指定相對路徑資訊 path 。 相對路徑資訊會解譯為相對於目前工作目錄,您可以使用 方法來判斷 GetCurrentDirectory

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

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

適用於

EnumerateFiles(String)

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

傳回指定路徑中完整檔名的可列舉集合。

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path);
static member EnumerateFiles : string -> seq<string>
Public Shared Function EnumerateFiles (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.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory);

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles sourceDirectory

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
    printfn $"{e.Message}"
Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub

End Module

下列範例會列舉指定目錄中的檔案、讀取檔案的每一行,如果它包含字串 「Europe」,則會顯示該行。

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

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // LINQ query for all files containing the word 'Europe'.
            var files = from file in
                Directory.EnumerateFiles(@"\\archives1\library\")
                where file.ToLower().Contains("europe")
                select file;

            foreach (var file in files)
            {
                Console.WriteLine("{0}", file);
            }
            Console.WriteLine("{0} files found.", files.Count<string>().ToString());
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
open System
open System.IO

try
    // All files containing the word 'Europe'.
    let files =
        Directory.EnumerateFiles @"\\archives1\library\"
        |> Seq.filter (fun file -> file.ToLower().Contains "europe")

    for file in files do
        printfn $"{file}"
    printfn $"{Seq.length files} files found."

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

Module Module1

    Sub Main()
        Try
            ' LINQ query for all files containing the word 'Europe'.
            Dim files = From file In Directory.EnumerateFiles("\\archives1\library\")
                Where file.ToLower().Contains("europe")

            For Each file In files
                Console.WriteLine("{0}", file)
            Next
            Console.WriteLine("{0} files found.", files.Count.ToString())
        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try
    End Sub

End Module

備註

您可以使用 參數指定相對路徑資訊 path 。 相對路徑資訊會解譯為相對於目前工作目錄,您可以使用 方法來判斷 GetCurrentDirectory

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

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

適用於

EnumerateFiles(String, String)

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

傳回指定路徑中符合搜尋模式之完整檔名的可列舉集合。

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern);
static member EnumerateFiles : string * string -> seq<string>
Public Shared Function EnumerateFiles (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.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))

with e ->
    printfn $"{e.Message}"
Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try
    End Sub

End Module

下列範例會列舉指定目錄中擴展名為 「.txt」 的檔案、讀取檔案的每一行,並在包含字串 「Europe」 時顯示該行。

using System;
using System.Linq;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // LINQ query for all .txt files containing the word 'Europe'.
            var files = from file in Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
                where file.ToLower().Contains("europe")
                select file;

            foreach (var file in files)
            {
                Console.WriteLine("{0}", file);
            }
            Console.WriteLine("{0} files found.", files.Count<string>().ToString());
        }
            
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
open System
open System.IO

try
    // All .txt files containing the word 'Europe'.
    let files = 
        Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
        |> Seq.filter(fun file -> file.ToLower().Contains "europe")

    for file in files do
        printfn $"{file}"
    printfn $"{Seq.length files} files found."

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

Module Module1

    Sub Main()
        Try
            ' LINQ query for all .txt files containing the word 'Europe'.
            Dim files = From file In Directory.EnumerateFiles("\\archives1\library\", "*.txt")
                Where file.ToLower().Contains("europe")

            For Each file In files
                Console.WriteLine("{0}", file)
            Next
            Console.WriteLine("{0} files found.", files.Count.ToString())
        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

注意

僅限 .NET Framework:當您在 searchPattern 中使用星號通配符,並指定三個字元擴展名時,例如 “*.txt”,此方法也會傳回擴展名開頭為指定擴展名的檔案。 例如,搜尋模式 「*.xls」 會同時傳回 「book.xls」 和 「book.xlsx」。 只有在搜尋模式中使用星號,且提供的擴展名剛好是三個字元時,才會發生此行為。 如果您在搜尋模式的某處使用問號通配符,此方法只會傳回完全符合指定擴展名的檔案。 下表描述 .NET Framework 中的這個異常。

目錄中的檔案 搜尋模式 .NET 5+ 傳回 .NET Framework 傳回
file.ai,file.aif *。艾 file.ai file.ai
book.xls,book.xlsx *.xls book.xls book.xls,book.xlsx
ello.txt、hello.txt、hello.txtt ?ello.txt hello.txt hello.txt

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

您可以使用 參數指定相對路徑資訊 path 。 相對路徑資訊會解譯為相對於目前的工作目錄,您可以使用 方法來判斷 GetCurrentDirectory

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

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

適用於