1

我有一个带有 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 类中捕获输出的想法。

4

2 回答 2

5

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

而是使用Directory.EnumerateFileswhich lazily 仅返回与您的过滤条件和搜索模式匹配的路径。

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();
于 2013-11-14T19:20:20.703 回答
3

SelectFullName

List<string> files = directory.GetFiles("*", SearchOption.AllDirectories)
                              .Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date)
                              .Select(f => f.FullName)
                              .ToList();
于 2013-11-14T19:17:11.187 回答