LINQ 和文件目录
许多文件系统操作实质上是查询,因此非常适合使用 LINQ 方法。
说明 |
---|
如果要对多种类型的文件和文档的内容执行编程查询,可以考虑使用 Windows Desktop Search Engine(Windows 桌面搜索引擎)。虽然当前无法使用 LINQ 进行查询,但它提供了功能强大的索引服务,可有效地管理文件系统的复杂性。 |
请注意,本节中的查询是非破坏性查询。它们不用于更改原始文件或文件夹的内容。这遵循了查询不应引起任何副作用这条规则。通常,修改源数据的任何代码(包括执行创建/更新/删除运算符的查询)应与只查询数据的代码分开。
本节包含下列主题:
如何:查询具有指定特性或名称的文件
演示如何通过检查文件的 FileInfo 对象的一个或多个属性来搜索文件。如何:按扩展名对文件分组 (LINQ)
演示如何根据文件扩展名返回 FileInfo 对象组。如何:查询一组文件夹中的总字节数 (LINQ)
演示如何返回指定目录树中的所有文件中的总字节数。如何:比较两个文件夹的内容 (LINQ)
演示如何返回位于两个指定文件夹中的所有文件,以及仅位于其中一个文件夹中的所有文件。如何:查询目录树中的一个或多个最大的文件 (LINQ)
演示如何返回目录树中的最大文件、最小文件或指定数量的文件。如何:在目录树中查询重复文件 (LINQ)
演示如何对出现在指定目录树的多个位置的所有文件名进行分组。此外,还演示如何根据自定义比较器执行更复杂的比较。如何:查询文件夹中的文件的内容 (LINQ)
演示如何循环访问树中的文件夹,打开每个文件以及查询文件的内容。
注释
创建准确表示文件系统的内容并适当处理异常的数据源,存在一些难度。本节中的示例创建 FileInfo 对象的快照集合,该集合表示指定的根文件夹及其所有子文件夹下的所有文件。每个 FileInfo 的实际状态可能会在您开始和结束执行查询过程中发生更改。例如,您可以创建 FileInfo 对象的列表来用作数据源。如果您尝试通过查询访问 Length 属性,则 FileInfo 对象会尝试访问文件系统来更新 Length 的值。如果该文件不再存在,则您会在查询中获得 FileNotFoundException,即使您没有直接查询文件系统也是如此。本节中的一些查询使用不同的方法,在某些情况下使用该方法不会出现这些特定异常。另一种方法是使用 FileSystemWatcher 保持数据源动态更新。