首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按搜索条件检索文件列表的最快方法- c#

按搜索条件检索文件列表的最快方法- c#
EN

Stack Overflow用户
提问于 2013-11-14 19:13:48
回答 2查看 2.5K关注 0票数 1

我有一个带有txt文件的目录结构。

我想要一个文件名列表,其中修改/创建日期在一个范围之间。

到目前为止,我有这样的想法:

代码语言:javascript
复制
        DirectoryInfo directory = new DirectoryInfo(@"C:\MotionWise\Manifest\000EC902F17F");
        DateTime from_date = DateTime.Now.AddMinutes(-300);
        DateTime to_date = DateTime.Now;
        List<FileInfo> files = directory.GetFiles("*", SearchOption.AllDirectories).Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date).ToList();

现在,我只对完整的路径名称感兴趣。

如果我通过文件列表枚举,我可以将完整的路径名添加到一个新的列表/数组中,但是这似乎是在浪费额外的精力,因为我觉得在lambada代码中有一种方法可以做到这一点?

如果可以在lambada代码中完成,按文件信息选择的内容会不会太“重”?有没有一种方法只是选择完整的路径名称,而不“加载”每个条目到一个文件的信息?

我一直在尝试执行DOS命令并在Process类中捕获输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-14 19:20:20

如果您只对路径感兴趣,请不要使用DirectoryInfo.GetFiles,因为它返回一个数组,并且因为它是一个FileInfo[],其中每个FileInfo对象都包含您不感兴趣的所有信息。您可以使用File.GetLastWriteTime来获取它。

相反,使用Directory.EnumerateFiles,它只返回匹配筛选条件和搜索模式的路径。

代码语言:javascript
复制
List<string> paths = Directory.EnumerateFiles(@"C:\MotionWise\Manifest\000EC902F17F", "*", SearchOption.AllDirectories)
    .Where(path => {
        DateTime lastWriteTime = File.GetLastWriteTime(path);
        return lastWriteTime >= from_date && lastWriteTime <= to_date;
    })
    .ToList();
票数 5
EN

Stack Overflow用户

发布于 2013-11-14 19:17:11

只有SelectFullName

代码语言:javascript
复制
List<string> files = directory.GetFiles("*", SearchOption.AllDirectories)
                              .Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date)
                              .Select(f => f.FullName)
                              .ToList();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19986321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档