14

的背景:

我有一个应用程序需要在其安装的 .NET 框架范围从 2.0 一直到 4.5 的客户端上运行。此应用程序必须能够对大量文件(在特定情况下超过 200k 个离散文件)进行枚举和执行操作。

为了构建文件索引,应用程序当前使用System.IO.DirectoryInfo.GetFiles()。这会影响性能,因为处理组件必须等待整个路径树被索引才能开始工作。由于一些过时的磁带多加载器和一些编写不佳的固件,遍历某些目录可能会触发从磁带读取 - 将处理时间从几十秒缩短到几十分钟。

.NET 4.0 提供了System.IO.Directory.EnumerateFiles(Path)方法,可以缓解这个问题。然而,只有少数 datter 控制台已升级到 4.0+,我们要求进行现代化改造的请求遭到了敌意。

问题:

是否可以在单个二进制文件中同时实现 GetFiles 和 EnumerateFiles 的方法?实际上,这将是针对 .NET 2.0 的单个二进制文件,如果在运行时确定 4.0 框架可用,则能够调用 .NET 4.0 方法。

在提到之前:更换数据不是我们客户的选择。我试过了。我有没有试过。

4

1 回答 1

10

您将无法(轻松)制作在 .NET 2.0 上运行并使用 .NET 4.0 方法的单个二进制文件。有各种各样的迂回方式 - 反射等,但在你的情况下,这些似乎是个坏主意。

但是,您没有理由不能在 .NET 2.0 库中自己实现 EnumerateFiles。为此,您需要对 WIN32 函数FindFirstFileFindNextFile. 两个 CodeProject 项目看起来涵盖了这个区域,并且应该在源代码中包含正确的位:

于 2013-01-29T21:17:03.563 回答