我有一个带有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类中的输出。
答案 0 :(得分:4)
如果您只对路径感兴趣,请不要使用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();
答案 1 :(得分:3)
Select
上的FullName
:
List<string> files = directory.GetFiles("*", SearchOption.AllDirectories)
.Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date)
.Select(f => f.FullName)
.ToList();