DirectoryInfo.GetFiles 方法
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
從目前的目錄傳回檔案清單。
GetFiles(String, EnumerationOptions) |
傳回目前目錄中符合所指定搜尋模式和列舉選項的檔案清單。 |
GetFiles(String, SearchOption) |
從目前目錄傳回符合指定搜尋模式的檔案清單,並使用值來判斷是否搜尋子目錄。 |
GetFiles() |
從目前的目錄傳回檔案清單。 |
GetFiles(String) |
從目前目錄傳回符合指定之搜尋模式的檔案清單。 |
傳回目前目錄中符合所指定搜尋模式和列舉選項的檔案清單。
public:
cli::array <System::IO::FileInfo ^> ^ GetFiles(System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public System.IO.FileInfo[] GetFiles (string searchPattern, System.IO.EnumerationOptions enumerationOptions);
member this.GetFiles : string * System.IO.EnumerationOptions -> System.IO.FileInfo[]
Public Function GetFiles (searchPattern As String, enumerationOptions As EnumerationOptions) As FileInfo()
參數
- searchPattern
- String
要比對檔案名稱的搜尋字串。 這個參數可以包含有效常值路徑與萬用 (* 和 ?) 字元的組合,但是不支援規則運算式。
- enumerationOptions
- EnumerationOptions
物件,描述要使用的搜尋和列舉組態。
傳回
符合 searchPattern
和 enumerationOptions
的強型別 FileInfo 物件陣列。
例外狀況
.NET Framework 和 2.1 之前的 .NET Core 版本:searchPattern
包含 方法所GetInvalidPathChars()定義的一或多個無效字元。
searchPattern
為 null
。
路徑無效 (例如,它位於未對應的磁碟機上)。
呼叫端沒有必要的權限。
備註
searchPattern
可以是常值和通配符的組合,但不支援正則表達式。 在中 searchPattern
允許下列通配符規範。
通配符規範 | 相符項 |
---|---|
* (星號) | 該位置中的零或多個字元。 |
? (問號) | 該位置中的零或一個字元。 |
通配符以外的字元是常值字元。 例如,字串 「*t」 會搜尋以字母 「t」 結尾的所有名稱。 字串 searchPattern
“s*” 會搜尋以字母 “s” 開頭的所有名稱 path
。
EnumerateFiles和 GetFiles 方法不同,如下所示:
當您使用 EnumerateFiles時,可以在傳回整個集合之前,開始列舉 物件的集合 FileInfo 。
因此,當您使用許多檔案和目錄時, EnumerateFiles 可能會更有效率。
如果 中 DirectoryInfo沒有任何檔案,這個方法會傳回空陣列。
參數中 searchPattern
允許下列通配符規範。
萬用字元 | 描述 |
---|---|
* | 零或多個字元。 |
? | 完全為零或一個字元。 |
不保證傳回檔名的順序;如果需要特定排序順序,請使用 Sort 方法。
允許使用萬用字元。 例如, searchPattern
字串 「*.txt」 會搜尋擴展名為 「txt」 的所有檔名。 字串 searchPattern
“s*” 會搜尋以字母 “s” 開頭的所有檔名。 如果沒有檔案,或沒有符合 searchPattern
中字串的 DirectoryInfo檔案,這個方法會傳回空陣列。
注意
例如,在 (中使用 searchPattern
星號通配符時,“*.txt”) ,比對行為會根據指定的擴展名長度而有所不同。 擴展名剛好三個字元的 會 searchPattern
傳回擴展名為三個或多個字元的檔案,其中前三個字元符合 中指定的 searchPattern
擴展名。 searchPattern
擴展名為 1、2 或超過三個字元的 只會傳回擴展名完全符合 中所searchPattern
指定擴展名的檔案。 使用問號通配符時,這個方法只會傳回符合指定擴展名的檔案。 例如,在目錄中指定兩個檔案“file1.txt” 和 “file1.txtother”,“file?.txt” 的搜尋模式只會傳回第一個檔案,而 “file*.txt” 的搜尋模式則會傳回這兩個檔案。
注意
因為此方法會檢查檔名格式為 8.3 和長檔名格式的檔名,所以類似 “*1*.txt” 的搜尋模式可能會傳回非預期的檔名。 例如,使用 “*1*.txt” 的搜尋模式會傳回 “longfilename.txt”,因為對等的 8.3 檔名格式會是 “longf~1.txt”。
這個方法會預先填入下列 FileInfo 屬性的值:
適用於
從目前目錄傳回符合指定搜尋模式的檔案清單,並使用值來判斷是否搜尋子目錄。
public:
cli::array <System::IO::FileInfo ^> ^ GetFiles(System::String ^ searchPattern, System::IO::SearchOption searchOption);
public System.IO.FileInfo[] GetFiles (string searchPattern, System.IO.SearchOption searchOption);
member this.GetFiles : string * System.IO.SearchOption -> System.IO.FileInfo[]
Public Function GetFiles (searchPattern As String, searchOption As SearchOption) As FileInfo()
參數
- searchPattern
- String
要比對檔案名稱的搜尋字串。 這個參數可以包含有效常值路徑與萬用 (* 和 ?) 字元的組合,但是不支援規則運算式。
- searchOption
- SearchOption
其中一個列舉值,指定搜尋作業應該只包含目前目錄還是包含所有子目錄。
傳回
類型為 FileInfo 的陣列。
例外狀況
.NET Framework 和 2.1 之前的 .NET Core 版本:searchPattern
包含 方法所GetInvalidPathChars()定義的一或多個無效字元。
searchPattern
為 null
。
searchOption
不是有效的 SearchOption 值。
路徑無效 (例如,它位於未對應的磁碟機上)。
呼叫端沒有必要的權限。
範例
下列範例示範如何使用不同的搜尋選項,從目錄取得檔案清單。 此範例假設目錄具有名為 log1.txt、log2.txt、test1.txt、test2.txt、test3.txt,以及具有名為 SubFile.txt 檔案的子目錄。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DirectoryInfo di = new DirectoryInfo(@"C:\Users\tomfitz\Documents\ExampleDir");
Console.WriteLine("No search pattern returns:");
foreach (var fi in di.GetFiles())
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern *2* returns:");
foreach (var fi in di.GetFiles("*2*"))
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern test?.txt returns:");
foreach (var fi in di.GetFiles("test?.txt"))
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern AllDirectories returns:");
foreach (var fi in di.GetFiles("*", SearchOption.AllDirectories))
{
Console.WriteLine(fi.Name);
}
}
}
}
/*
This code produces output similar to the following:
No search pattern returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
Search pattern *2* returns:
log2.txt
test2.txt
Search pattern test?.txt returns:
test1.txt
test2.txt
test3.txt
Search pattern AllDirectories returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
SubFile.txt
Press any key to continue . . .
*/
open System.IO
let di = DirectoryInfo @"C:\Users\tomfitz\Documents\ExampleDir"
printfn "No search pattern returns:"
for fi in di.GetFiles() do
printfn $"{fi.Name}"
printfn "\nSearch pattern *2* returns:"
for fi in di.GetFiles "*2*" do
printfn $"{fi.Name}"
printfn "\nSearch pattern test?.txt returns:"
for fi in di.GetFiles "test?.txt" do
printfn $"{fi.Name}"
printfn "\nSearch pattern AllDirectories returns:"
for fi in di.GetFiles("*", SearchOption.AllDirectories) do
printfn $"{fi.Name}"
(*
This code produces output similar to the following:
No search pattern returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
Search pattern *2* returns:
log2.txt
test2.txt
Search pattern test?.txt returns:
test1.txt
test2.txt
test3.txt
Search pattern AllDirectories returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
SubFile.txt
Press any key to continue . . .
*)
Imports System.IO
Module Module1
Sub Main()
Dim di As DirectoryInfo = New DirectoryInfo("C:\ExampleDir")
Console.WriteLine("No search pattern returns:")
For Each fi In di.GetFiles()
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern *2* returns:")
For Each fi In di.GetFiles("*2*")
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern test?.txt returns:")
For Each fi In di.GetFiles("test?.txt")
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern AllDirectories returns:")
For Each fi In di.GetFiles("*", SearchOption.AllDirectories)
Console.WriteLine(fi.Name)
Next
End Sub
End Module
' This code produces output similar to the following:
' No search pattern returns:
' log1.txt
' log2.txt
' test1.txt
' test2.txt
' test3.txt
' Search pattern *2* returns:
' log2.txt
' test2.txt
' Search pattern test?.txt returns:
' test1.txt
' test2.txt
' test3.txt
' Search pattern AllDirectories returns:
' log1.txt
' log2.txt
' test1.txt
' test2.txt
' test3.txt
' SubFile.txt
' Press any key to continue . . .
備註
EnumerateFiles和 GetFiles 方法不同,如下所示:
當您使用 EnumerateFiles時,可以在傳回整個集合之前,開始列舉 物件的集合 FileInfo 。
因此,當您使用許多檔案和目錄時, EnumerateFiles 可能會更有效率。
如果 中 DirectoryInfo沒有任何檔案,這個方法會傳回空陣列。
在中 searchPattern
允許下列通配符規範。
萬用字元 | 描述 |
---|---|
* (星號) | 零或多個字元。 |
? (問號) | 完全為零或一個字元。 |
不保證傳回檔名的順序;如果需要特定排序順序,請使用 Sort 方法。
允許使用萬用字元。 例如, searchPattern
字串 「*.txt」 會搜尋擴展名為 「txt」 的所有檔名。 字串 searchPattern
“s*” 會搜尋以字母 “s” 開頭的所有檔名。 如果沒有檔案,或沒有符合 searchPattern
中字串的 DirectoryInfo檔案,這個方法會傳回空陣列。
注意
例如,在 (中使用 searchPattern
星號通配符時,“*.txt”) ,比對行為會根據指定的擴展名長度而有所不同。 擴展名剛好三個字元的 會 searchPattern
傳回擴展名為三個或多個字元的檔案,其中前三個字元符合 中指定的 searchPattern
擴展名。 searchPattern
擴展名為 1、2 或超過三個字元的 只會傳回擴展名完全符合 中所searchPattern
指定擴展名的檔案。 使用問號通配符時,這個方法只會傳回符合指定擴展名的檔案。 例如,在目錄中指定兩個檔案“file1.txt” 和 “file1.txtother”,“file?.txt” 的搜尋模式只會傳回第一個檔案,而 “file*.txt” 的搜尋模式則會傳回這兩個檔案。
下列清單顯示參數不同長度 searchPattern
的行為:
“*.abc” 會傳回擴展名為 .abc、.abcd、.abcde、.abcdef 等的檔案。
“*.abcd” 只會傳回擴展名為 .abcd 的檔案。
“*.abcde” 只會傳回擴展名為 .abcde 的檔案。
“*.abcdef” 只會傳回擴展名為 .abcdef 的檔案。
注意
因為此方法會檢查檔名格式為 8.3 和長檔名格式的檔名,所以類似 “*1*.txt” 的搜尋模式可能會傳回非預期的檔名。 例如,使用 “*1*.txt” 的搜尋模式會傳回 “longfilename.txt”,因為對等的 8.3 檔名格式會是 “longf~1.txt”。
這個方法會預先填入下列 FileInfo 屬性的值:
另請參閱
適用於
從目前的目錄傳回檔案清單。
public:
cli::array <System::IO::FileInfo ^> ^ GetFiles();
public System.IO.FileInfo[] GetFiles ();
member this.GetFiles : unit -> System.IO.FileInfo[]
Public Function GetFiles () As FileInfo()
傳回
類型為 FileInfo 的陣列。
例外狀況
路徑無效,例如位於未對應的磁碟機上。
範例
下列範例示範如何使用不同的搜尋選項,從目錄取得檔案清單。 此範例假設目錄具有名為 log1.txt、log2.txt、test1.txt、test2.txt、test3.txt,以及具有名為 SubFile.txt 檔案的子目錄。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DirectoryInfo di = new DirectoryInfo(@"C:\Users\tomfitz\Documents\ExampleDir");
Console.WriteLine("No search pattern returns:");
foreach (var fi in di.GetFiles())
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern *2* returns:");
foreach (var fi in di.GetFiles("*2*"))
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern test?.txt returns:");
foreach (var fi in di.GetFiles("test?.txt"))
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern AllDirectories returns:");
foreach (var fi in di.GetFiles("*", SearchOption.AllDirectories))
{
Console.WriteLine(fi.Name);
}
}
}
}
/*
This code produces output similar to the following:
No search pattern returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
Search pattern *2* returns:
log2.txt
test2.txt
Search pattern test?.txt returns:
test1.txt
test2.txt
test3.txt
Search pattern AllDirectories returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
SubFile.txt
Press any key to continue . . .
*/
open System.IO
let di = DirectoryInfo @"C:\Users\tomfitz\Documents\ExampleDir"
printfn "No search pattern returns:"
for fi in di.GetFiles() do
printfn $"{fi.Name}"
printfn "\nSearch pattern *2* returns:"
for fi in di.GetFiles "*2*" do
printfn $"{fi.Name}"
printfn "\nSearch pattern test?.txt returns:"
for fi in di.GetFiles "test?.txt" do
printfn $"{fi.Name}"
printfn "\nSearch pattern AllDirectories returns:"
for fi in di.GetFiles("*", SearchOption.AllDirectories) do
printfn $"{fi.Name}"
(*
This code produces output similar to the following:
No search pattern returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
Search pattern *2* returns:
log2.txt
test2.txt
Search pattern test?.txt returns:
test1.txt
test2.txt
test3.txt
Search pattern AllDirectories returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
SubFile.txt
Press any key to continue . . .
*)
Imports System.IO
Module Module1
Sub Main()
Dim di As DirectoryInfo = New DirectoryInfo("C:\ExampleDir")
Console.WriteLine("No search pattern returns:")
For Each fi In di.GetFiles()
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern *2* returns:")
For Each fi In di.GetFiles("*2*")
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern test?.txt returns:")
For Each fi In di.GetFiles("test?.txt")
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern AllDirectories returns:")
For Each fi In di.GetFiles("*", SearchOption.AllDirectories)
Console.WriteLine(fi.Name)
Next
End Sub
End Module
' This code produces output similar to the following:
' No search pattern returns:
' log1.txt
' log2.txt
' test1.txt
' test2.txt
' test3.txt
' Search pattern *2* returns:
' log2.txt
' test2.txt
' Search pattern test?.txt returns:
' test1.txt
' test2.txt
' test3.txt
' Search pattern AllDirectories returns:
' log1.txt
' log2.txt
' test1.txt
' test2.txt
' test3.txt
' SubFile.txt
' Press any key to continue . . .
備註
EnumerateFiles和 GetFiles 方法不同,如下所示:
當您使用 EnumerateFiles時,可以在傳回整個集合之前,開始列舉 物件的集合 FileInfo 。
因此,當您使用許多檔案和目錄時, EnumerateFiles 可能會更有效率。
如果 中 DirectoryInfo沒有任何檔案,這個方法會傳回空陣列。
不保證傳回檔名的順序;如果需要特定排序順序,請使用 Sort 方法。
這個方法會預先填入下列 FileInfo 屬性的值:
另請參閱
適用於
從目前目錄傳回符合指定之搜尋模式的檔案清單。
public:
cli::array <System::IO::FileInfo ^> ^ GetFiles(System::String ^ searchPattern);
public System.IO.FileInfo[] GetFiles (string searchPattern);
member this.GetFiles : string -> System.IO.FileInfo[]
Public Function GetFiles (searchPattern As String) As FileInfo()
參數
- searchPattern
- String
要比對檔案名稱的搜尋字串。 這個參數可以包含有效常值路徑與萬用 (* 和 ?) 字元的組合,但是不支援規則運算式。
傳回
類型為 FileInfo 的陣列。
例外狀況
.NET Framework 和 2.1 之前的 .NET Core 版本:searchPattern
包含 方法所GetInvalidPathChars()定義的一或多個無效字元。
searchPattern
為 null
。
路徑無效 (例如,它位於未對應的磁碟機上)。
呼叫端沒有必要的權限。
範例
下列範例示範如何使用不同的搜尋選項,從目錄取得檔案清單。 此範例假設目錄具有名為 log1.txt、log2.txt、test1.txt、test2.txt、test3.txt,以及具有名為 SubFile.txt 檔案的子目錄。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DirectoryInfo di = new DirectoryInfo(@"C:\Users\tomfitz\Documents\ExampleDir");
Console.WriteLine("No search pattern returns:");
foreach (var fi in di.GetFiles())
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern *2* returns:");
foreach (var fi in di.GetFiles("*2*"))
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern test?.txt returns:");
foreach (var fi in di.GetFiles("test?.txt"))
{
Console.WriteLine(fi.Name);
}
Console.WriteLine();
Console.WriteLine("Search pattern AllDirectories returns:");
foreach (var fi in di.GetFiles("*", SearchOption.AllDirectories))
{
Console.WriteLine(fi.Name);
}
}
}
}
/*
This code produces output similar to the following:
No search pattern returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
Search pattern *2* returns:
log2.txt
test2.txt
Search pattern test?.txt returns:
test1.txt
test2.txt
test3.txt
Search pattern AllDirectories returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
SubFile.txt
Press any key to continue . . .
*/
open System.IO
let di = DirectoryInfo @"C:\Users\tomfitz\Documents\ExampleDir"
printfn "No search pattern returns:"
for fi in di.GetFiles() do
printfn $"{fi.Name}"
printfn "\nSearch pattern *2* returns:"
for fi in di.GetFiles "*2*" do
printfn $"{fi.Name}"
printfn "\nSearch pattern test?.txt returns:"
for fi in di.GetFiles "test?.txt" do
printfn $"{fi.Name}"
printfn "\nSearch pattern AllDirectories returns:"
for fi in di.GetFiles("*", SearchOption.AllDirectories) do
printfn $"{fi.Name}"
(*
This code produces output similar to the following:
No search pattern returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
Search pattern *2* returns:
log2.txt
test2.txt
Search pattern test?.txt returns:
test1.txt
test2.txt
test3.txt
Search pattern AllDirectories returns:
log1.txt
log2.txt
test1.txt
test2.txt
test3.txt
SubFile.txt
Press any key to continue . . .
*)
Imports System.IO
Module Module1
Sub Main()
Dim di As DirectoryInfo = New DirectoryInfo("C:\ExampleDir")
Console.WriteLine("No search pattern returns:")
For Each fi In di.GetFiles()
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern *2* returns:")
For Each fi In di.GetFiles("*2*")
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern test?.txt returns:")
For Each fi In di.GetFiles("test?.txt")
Console.WriteLine(fi.Name)
Next
Console.WriteLine()
Console.WriteLine("Search pattern AllDirectories returns:")
For Each fi In di.GetFiles("*", SearchOption.AllDirectories)
Console.WriteLine(fi.Name)
Next
End Sub
End Module
' This code produces output similar to the following:
' No search pattern returns:
' log1.txt
' log2.txt
' test1.txt
' test2.txt
' test3.txt
' Search pattern *2* returns:
' log2.txt
' test2.txt
' Search pattern test?.txt returns:
' test1.txt
' test2.txt
' test3.txt
' Search pattern AllDirectories returns:
' log1.txt
' log2.txt
' test1.txt
' test2.txt
' test3.txt
' SubFile.txt
' Press any key to continue . . .
備註
searchPattern
可以是常值和通配符的組合,但不支援正則表達式。 在中 searchPattern
允許下列通配符規範。
通配符規範 | 相符項 |
---|---|
* (星號) | 該位置中的零或多個字元。 |
? (問號) | 該位置中的零或一個字元。 |
通配符以外的字元是常值字元。 例如,字串 「*t」 會搜尋以字母 「t」 結尾的所有名稱。 字串 searchPattern
“s*” 會搜尋以字母 “s” 開頭的所有名稱 path
。
EnumerateFiles和 GetFiles 方法不同,如下所示:
當您使用 EnumerateFiles時,可以在傳回整個集合之前,開始列舉 物件的集合 FileInfo 。
因此,當您使用許多檔案和目錄時, EnumerateFiles 可能會更有效率。
如果 中 DirectoryInfo沒有任何檔案,這個方法會傳回空陣列。
參數中 searchPattern
允許下列通配符規範。
萬用字元 | 描述 |
---|---|
* | 零或多個字元。 |
? | 完全為零或一個字元。 |
不保證傳回檔名的順序;如果需要特定排序順序,請使用 Sort 方法。
允許使用萬用字元。 例如, searchPattern
字串 「*.txt」 會搜尋擴展名為 「txt」 的所有檔名。 字串 searchPattern
“s*” 會搜尋以字母 “s” 開頭的所有檔名。 如果沒有檔案,或沒有符合 searchPattern
中字串的 DirectoryInfo檔案,這個方法會傳回空陣列。
注意
例如,在 (中使用 searchPattern
星號通配符時,“*.txt”) ,比對行為會根據指定的擴展名長度而有所不同。 擴展名剛好三個字元的 會 searchPattern
傳回擴展名為三個或多個字元的檔案,其中前三個字元符合 中指定的 searchPattern
擴展名。 searchPattern
擴展名為 1、2 或超過三個字元的 只會傳回擴展名完全符合 中所searchPattern
指定擴展名的檔案。 使用問號通配符時,這個方法只會傳回符合指定擴展名的檔案。 例如,在目錄中指定兩個檔案“file1.txt” 和 “file1.txtother”,“file?.txt” 的搜尋模式只會傳回第一個檔案,而 “file*.txt” 的搜尋模式則會傳回這兩個檔案。
注意
因為此方法會檢查檔名格式為 8.3 和長檔名格式的檔名,所以類似 “*1*.txt” 的搜尋模式可能會傳回非預期的檔名。 例如,使用 “*1*.txt” 的搜尋模式會傳回 “longfilename.txt”,因為對等的 8.3 檔名格式會是 “longf~1.txt”。
這個方法會預先填入下列 FileInfo 屬性的值: