繁体   English   中英

通过搜索条件检索文件列表的最快方法-C#

[英]Fastest way to retrieve list of files by search criteria - c#

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

我想获取文件名列表,其中修改/创建日期在一个范围内。

到目前为止,我有这个:

        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代码中完成,按文件信息进行的选择会不会太“繁重”? 有没有一种方法可以只选择完整路径名,而无需将每个条目“加载”到文件信息中?

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

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

而是使用Directory.EnumerateFiles ,它仅懒惰地返回与您的过滤条件和搜索模式匹配的路径。

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();

只需在FullNameSelect

List<string> files = directory.GetFiles("*", SearchOption.AllDirectories)
                              .Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date)
                              .Select(f => f.FullName)
                              .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM