C#程式:獲取目錄中所有檔案


簡介

在計算機上,我們可以將檔案儲存在目錄中,也稱為資料夾。目錄還包含指向其他目錄和檔案的快捷方式。如果我們想知道目錄中儲存的所有檔案,C# 也提供了一種簡單的方法。在本文中,我們將學習一個 C# 程式來獲取目錄中存在的所有檔案。

瞭解目錄中可用檔案的的方法不止一種。讓我們在接下來的章節中討論它們。

1. GetFiles() 方法

要了解指定目錄中存在的檔名,我們使用 GetFiles() 方法。

public static string[] GetFiles (string path); 

我們可以使用 GetFiles() 和 GetDirectories() 來了解指定目錄中的檔案和子目錄。

它的引數,即目錄的絕對路徑或相對路徑,是一個字串。並且不區分大小寫。此函式返回一個數組,其中包含指定目錄中檔案的名稱列表及其路徑。有時,當目錄為空時,也會返回一個空陣列。

演算法

現在,讓我們討論使用 GetFiles() 方法獲取目錄中所有檔案的演算法。

步驟 1 − 首先,我們宣告一個字串來儲存目錄的地址。

步驟 2  我們使用 GetFiles() 獲取檔案列表,並將其儲存在名為 fyles 的陣列中。

步驟 3  最後,我們列印檔案列表。

示例

using System;
using System.IO;
public class Example {
   public static void Main() {
      string directloc = @"D:\mypc\addre";

      // files list from the root directory and prints it
      string[] fyles = Directory.GetFiles(directloc);
      Console.WriteLine(String.Join(Environment.NewLine, fyles));
   }
}

輸出

abrew.txt
zuma.txt

現在,要獲取根目錄(即我們正在搜尋的目錄及其子資料夾)中存在的各種檔案型別的詳細資訊,我們使用“*”模式和 SearchOption.AllDirectories,它檢索目錄及其子目錄中存在的多種型別的檔案。

SearchOption.AllDirectories 演算法

現在,讓我們討論使用 SearchOption.AllDirectories 方法獲取目錄及其子目錄中所有檔案的演算法。

步驟 1  首先,我們宣告一個字串來儲存目錄的地址。

步驟 2  我們使用 SearchOption.AllDirectories 獲取目錄及其子目錄中的檔案列表,並將其儲存在名為 fyles 的陣列中。

步驟 3  最後,我們列印檔案列表。

示例

using System;
using System.IO;

public class Example {
   public static void Main() {
      string directloc = @"D:\mypc\addre";

      // files list from the root directory and its subdirectories and prints it
      string[] fyles = Directory.GetFiles(directloc, "*", SearchOption.AllDirectories);
      Console.WriteLine(String.Join(Environment.NewLine, fyles));

   }
} 

輸出

abrew.txt
zuma.txt

因此,透過這種方式,我們可以使用 GetFiles() 方法瞭解目錄及其子目錄中的檔案。現在,進入下一節,我們將討論 EnumerateFiles 方法來了解目錄及其子目錄中的檔案。

2. EnumerateFiles 方法

從方法名稱可以看出,這是一個返回可列舉集合的方法。因此,此方法返回給定目錄中與使用者定義的搜尋匹配的完整檔名組成的可列舉集合,並額外探索資料夾。

public static System.Collections.Generic.IEnumerable EnumerateFiles (string path, string searchPattern, System.IO.SearchOption searchOption); 

這裡,searchOption 引數指示搜尋是否應僅包含當前路徑或所有子目錄。searchPattern 是與使用者定義路徑中檔名匹配的搜尋字串。它可以包含有效的文字路徑和萬用字元(* 和 ?)字元,但不包含正則表示式。

演算法

現在,讓我們討論使用 Directory.EnumerateFiles() 方法獲取目錄中所有檔案的演算法。

步驟 1  首先,我們宣告一個字串來儲存目錄的地址。

步驟 2  我們使用 Directory.EnumerateFiles(directloc, "*", SearchOption.AllDirectories); 獲取目錄及其子目錄中的檔案列表,並將其儲存在一個名為 fyles 的變數中。

步驟 3  最後,我們列印檔案列表。

示例

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

public class Example {
   public static void Main() {
      string directloc = @"D:\mypc\addre";

      // files list from the root directory and its subdirectories and prints it
      var fyles = Directory.EnumerateFiles(directloc, "*", SearchOption.AllDirectories);
      Console.WriteLine(String.Join(Environment.NewLine, fyles)); 
   }
} 

輸出

abrew.txt
zuma.txt

searchPattern 在此方法中非常重要,因為它混合了萬用字元和文字字元。它不允許正則表示式。以下是萬用字元說明符及其匹配項。

萬用字元說明符

匹配項

*(星號)

該位置的零個或多個字元

?(問號)

該位置的恰好一個字元

如果我們使用“*o”,則檢查每個檔名是否以 o 結尾。如果我們使用“a*”,則檢查每個檔名是否以 a 開頭。此外,當在 searchPattern 中使用星號萬用字元和三字元副檔名(例如“*.txt”)時,這將返回副檔名與所述副檔名匹配的檔案。現在,讓我們看看另一種方法。

3. Directory.GetFileSystemEntries() 方法

此方法返回滿足程式設計師給定條件的所有檔案和子目錄的名稱。此方法的語法如下。

public static string[] GetFileSystemEntries (string path); 

另一種選擇是利用 Directory.GetFileSystemEntries() 檢索提供的路徑中所有檔案和子目錄的名稱。它帶有搜尋模式和搜尋選項。提供搜尋模式時,該方法會將其與路徑中檔案和資料夾的名稱進行比較。如果使用 SearchOption.AllDirectories 選項,它將搜尋所有子目錄。

演算法

現在,讓我們討論使用 Directory.GetFileSystemEntries() 方法獲取目錄中所有檔案的演算法。

步驟 1  首先,我們宣告一個字串來儲存目錄的地址。

步驟 2 − 我們使用 Directory.GetFileSystemEntries(rootdir, "*", SearchOption.AllDirectories); 獲取目錄及其子目錄中的檔案列表,並將其儲存在一個數組中。

步驟 3  最後,我們列印檔案列表。

示例

using System;
using System.IO;

public class Example {
   public static void Main() {
      string directloc = @"D:\mypc\addre";
      
      // files list from the root directory and its subdirectories and prints it
      string[] fyles = Directory.GetFileSystemEntries(directloc, "*", SearchOption.AllDirectories);
      Console.WriteLine(String.Join(Environment.NewLine, fyles));
   }
} 

輸出

abrew.txt
zuma.txt

結論

因此,本文到此結束。在本文中,我們學習瞭如何編寫 C# 程式來獲取目錄中存在的所有檔案。我們討論了不同的方法。我們還了解了這些方法的演算法並學習了它們的程式碼。我們希望本文能增強您對 C# 的瞭解。

更新於:2023年4月21日

15K+ 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.