如何通过GetFiles同时按文件名前缀与创建时间范围筛选文件?
解决GetFiles同时筛选文件名前缀和创建时间的问题
我来帮你搞定这个需求!你当前的代码已经能正确筛选出前缀为ArchiveDeleteLog的文件了,要把创建时间范围这个条件也加进去,其实结合LINQ就能轻松实现,不用拆分语句。
方案一:结合GetFiles与LINQ过滤
先定义好你需要的时间范围,然后在获取前缀匹配的文件后,用Where方法过滤时间条件:
// 替换成你的目标文件夹路径 string folderPath = @"C:\Your\Target\Folder"; // 定义时间范围,这里示例为2024年1月1日到当前时间 DateTime startCreationDate = new DateTime(2024, 1, 1); DateTime endCreationDate = DateTime.Now; DirectoryInfo dir = new DirectoryInfo(folderPath); FileInfo[] files = dir.GetFiles("ArchiveDeleteLog*", SearchOption.TopDirectoryOnly) .Where(file => file.CreationTime >= startCreationDate && file.CreationTime <= endCreationDate) .ToArray();
方案二:用EnumerateFiles提升大文件夹性能
如果目标文件夹里的文件数量非常多,GetFiles会一次性把所有匹配前缀的文件加载到内存里,这时候换成EnumerateFiles更高效——它是延迟加载的,会逐个处理文件,不用占用过多内存:
FileInfo[] files = dir.EnumerateFiles("ArchiveDeleteLog*", SearchOption.TopDirectoryOnly) .Where(file => file.CreationTime >= startCreationDate && file.CreationTime <= endCreationDate) .ToArray();
小提示
- 如果需要更可靠的时间(比如担心系统时间调整影响
CreationTime),可以换成LastWriteTime(文件最后写入的时间)或者LastAccessTime,根据你的实际需求选择。 - 记得要引用
System.Linq命名空间,否则Where方法会报错哦。
内容的提问来源于stack exchange,提问作者user9175041
相关产品推荐
相关产品推荐

