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";
// 文件列表来自于根目录并打印它
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";
// 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中使用asterisk通配符字符,并且具有三个字符的文件扩展名的名称,例如 “.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#知识。