VB.NET中用通配符查找文件并获取最新修改文件
查找指定通配符下修改时间最近的文件
你可以结合LINQ和Directory.EnumerateFiles来实现更简洁高效的方案,相比手动循环可读性更强,同时在大文件量场景下内存占用更优:
.NET 6 及以上版本(推荐)
利用.NET 6新增的MaxBy方法,直接获取修改时间最新的文件,代码最简洁:
string targetFolder = @"C:\Your\Target\Folder"; string searchPattern = "template*.txt"; var latestModifiedFile = Directory.EnumerateFiles(targetFolder, searchPattern) .Select(filePath => new FileInfo(filePath)) .MaxBy(fileInfo => fileInfo.LastWriteTime); if (latestModifiedFile != null) { // 找到文件后的处理逻辑 Console.WriteLine($"最近修改的文件:{latestModifiedFile.FullName},修改时间:{latestModifiedFile.LastWriteTime}"); } else { Console.WriteLine("未找到匹配通配符的文件"); }
.NET 5 及以下版本
如果使用较低版本的.NET框架,没有MaxBy方法,可以通过降序排序后取第一个:
string targetFolder = @"C:\Your\Target\Folder"; string searchPattern = "template*.txt"; var latestModifiedFile = Directory.EnumerateFiles(targetFolder, searchPattern) .Select(filePath => new FileInfo(filePath)) .OrderByDescending(fileInfo => fileInfo.LastWriteTime) .FirstOrDefault(); // 后续判断逻辑同上
为什么这是更优的实现?
- 内存效率更高:
Directory.EnumerateFiles采用延迟枚举,不会一次性将所有匹配的文件路径加载到内存中,当文件夹内文件数量极大时,比Directory.GetFiles更节省内存。 - 代码简洁可读:LINQ链式操作将"获取文件-转换为文件信息-筛选最新"的逻辑清晰串联,相比手动循环代码更紧凑,可读性更强。
- 性能接近手动循环:LINQ底层的枚举逻辑和手动循环效率几乎一致,不会带来额外的性能损耗。
注意事项
- 如果目标文件夹不存在,会抛出
DirectoryNotFoundException,可以提前用Directory.Exists(targetFolder)判断,或者用try-catch捕获异常。 - 若需要搜索子文件夹,可以在
EnumerateFiles中添加第三个参数SearchOption.AllDirectories。
内容的提问来源于stack exchange,提问作者Max Headroom
相关产品推荐
相关产品推荐

