C# 程序获取目录中存在的所有文件

csharpserver side programmingprogramming更新于 2025/9/18 8:28:00

简介

在计算机上,我们可以将文件存储在目录中,也称为文件夹。目录还包含其他目录和文件的快捷方式。如果我们想知道目录中存储了哪些文件,那么 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";

      // 从根目录中获取文件列表并打印出来
      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";

      // 从根目录及其子目录中获取文件列表并打印出来
      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";

      // 从根目录及其子目录中获取文件列表并打印出来
      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";
      
      // 从根目录及其子目录中获取文件列表并打印出来
      string[] fyles = Directory.GetFileSystemEntries(directloc, "*", SearchOption.AllDirectories);
      Console.WriteLine(String.Join(Environment.NewLine, fyles));
   }
} 

输出

abrew.txt
zuma.txt

结论

因此,本文到此结束。在本文中,我们了解了如何编写 C# 程序来获取目录中的所有文件。我们讨论了不同的方法。我们还了解了这些方法的算法并学习了它们的代码。我们希望本文能增强您对 C# 的了解。


相关文章