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+ 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告