📌  相关文章
📜  Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).OrderBy (1)

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

使用 Directory.GetFiles 方法获取指定目录下的所有 DLL 文件信息

本文介绍如何使用 C# 中的 System.IO.Directory 类的 GetFiles() 方法获取指定目录下所有的 DLL 文件信息,并使用 LINQ 将文件路径转换为 System.IO.FileInfo 实例,并最终排序输出。

Directory.GetFiles 方法

System.IO.Directory 类的 GetFiles() 方法可以返回指定目录中符合指定搜索模式的文件的全路径数组。方法签名如下:

public static string[] GetFiles(string path, string searchPattern);

其中 path 参数是指要搜索的目录的路径,searchPattern 参数可以是包含通配符的字符串(如 *.dll)。

例如,在 Windows 系统中,以下代码可以返回 C 盘根目录下所有的 DLL 文件路径:

string[] dllPaths = Directory.GetFiles(@"C:\", "*.dll");
LINQ 转换获取到的文件路径为 FileInfo 对象

System.IO.FileInfo 类表示文件的属性、构成和操作,其中包含了文件名称、扩展名、大小、读写属性等信息。通过 new FileInfo(filename) 构造函数可以将文件路径转换为 FileInfo 实例。

例如,以下代码将搜索得到的 dllPaths 数组内的所有文件路径都转换为 FileInfo 实例,将转换后的实例存储在 dllFiles 集合中:

IEnumerable<FileInfo> dllFiles =
    Directory.GetFiles(@"C:\Windows\System32\", "*.dll")
        .Select(path => new FileInfo(path));
使用 OrderBy 方法按序排序

按照 FileInfo 实例的某一成员变量来排序文件信息可以使用 OrderBy() 方法,例如,以下代码将按照文件名对 dllFiles 集合中的所有文件信息进行排序:

IEnumerable<FileInfo> sortedFiles =
  dllFiles.OrderBy(f => f.Name);
完整代码示例

下面的代码是一个完整的示例,将搜索得到的文件信息转换为 FileInfo 实例,并按文件名来排序输出:

string folder = @"C:\Windows\System32\";

IEnumerable<FileInfo> sortedDllFiles =
  Directory.GetFiles(folder, "*.dll")
            .Select(fn => new FileInfo(fn))
            .OrderBy(f => f.Name);

foreach (var file in sortedDllFiles)
{
    Console.WriteLine($"{file.Name}: {file.Length} bytes");
}

以上代码将输出 C:\Windows\System32\ 目录下所有 DLL 文件的文件名和文件大小。

结论

在本文中,我们介绍了如何使用 System.IO.Directory 类的 GetFiles() 方法搜索指定目录下的 DLL 文件,并使用 LINQ SelectOrderBy 方法将文件路径转换为 FileInfo 实例,并按文件名排序输出。这对于对 DLL 文件感兴趣的开发人员非常有用。