📜  C# 循环遍历目录 - C# (1)

📅  最后修改于: 2023-12-03 15:13:51.638000             🧑  作者: Mango

C# 循环遍历目录

在程序中,我们有时需要遍历系统中的某个目录下的所有文件,可以使用 C# 中提供的 DirectoryInfo 和 FileInfo 类来实现目录遍历的操作。

使用 DirectoryInfo 遍历目录

DirectoryInfo 类提供了许多有用的方法和属性,可以帮助我们处理目录和其下的文件信息。下面是一个简单的例子,展示如何使用 DirectoryInfo 类遍历指定目录下的所有文件。

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

public class DirectoryTraversal
{
    public static IEnumerable<string> TraverseDirectory(string path)
    {
        DirectoryInfo directory = new DirectoryInfo(path);

        // 遍历目录中的文件
        foreach (var file in directory.GetFiles())
        {
            yield return file.FullName;
        }

        // 遍历目录中的子目录
        foreach (var subdirectory in directory.GetDirectories())
        {
            foreach (var file in TraverseDirectory(subdirectory.FullName))
            {
                yield return file;
            }
        }
    }
}

在上面的代码中,我们定义了一个名为 TraverseDirectory 的静态方法,该方法接收一个字符串参数 path,代表要遍历的目录路径。TraverseDirectory 方法返回一个 IEnumerable 类型的对象,它可以被 foreach 循环语句直接遍历。

在 TraverseDirectory 方法中,我们首先创建了一个 DirectoryInfo 对象,该对象代表了指定路径的目录。然后,我们使用 GetFiles 方法获取该目录下的所有文件,并使用 yield return 语句逐个返回每个文件的完整路径。接着,我们使用 GetDirectories 方法获取该目录下的所有子目录,并对每个子目录调用 TraverseDirectory 方法进行递归遍历。对于每个遍历到的文件,我们同样使用 yield return 语句返回其完整路径。

使用 FileInfo 遍历目录

FileInfo 类提供了许多有用的方法和属性,可以帮助我们获取文件的详细信息。下面是一个简单的例子,展示如何使用 FileInfo 类遍历指定目录下的所有文件。

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

public class DirectoryTraversal
{
    public static IEnumerable<string> TraverseDirectory(string path)
    {
        DirectoryInfo directory = new DirectoryInfo(path);

        // 遍历目录中的文件
        foreach (var file in directory.GetFiles())
        {
            yield return file.FullName;
        }

        // 遍历目录中的子目录
        foreach (var subdirectory in directory.GetDirectories())
        {
            foreach (var file in TraverseDirectory(subdirectory.FullName))
            {
                yield return file;
            }
        }
    }

    public static IEnumerable<FileInfo> GetFileInfo(string path)
    {
        foreach (var filePath in TraverseDirectory(path))
        {
            yield return new FileInfo(filePath);
        }
    }
}

在上面的代码中,我们新增了一个名为 GetFileInfo 的静态方法,该方法接收一个字符串参数 path,代表要遍历的目录路径。GetFileInfo 方法返回一个 IEnumerable 类型的对象,它可以被 foreach 循环语句直接遍历。

在 GetFileInfo 方法中,我们首先调用 TraverseDirectory 方法获取指定目录下的所有文件的完整路径,并使用 foreach 循环语句逐个处理。对于每个遍历到的文件,我们使用 new FileInfo(filePath) 创建一个新的 FileInfo 对象,并使用 yield return 语句返回这个对象。这样,我们就可以获取到每个文件的详细信息,例如文件大小、创建时间、修改时间等。

结论

通过使用 C# 中提供的 DirectoryInfo 和 FileInfo 类,我们可以方便地遍历系统中的某个目录下的所有文件,并获取每个文件的详细信息。这是编写文件读取、文件处理和搜索引擎等应用程序时非常有用的功能。