我正在排序从昨天下午1:00到现在创建的文件列表。我尝试使用以下代码:消息框显示我尝试引用的正确时间,但过滤器似乎无法正常工作。如果我删除" AddHours(13)"它确实过滤了。
MessageBox.Show(DateTime.Now.Date.AddDays(-1).AddHours(13).ToString());
string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
.Where(file => new FileInfo(file).CreationTime.Date >= (DateTime.Now.Date.AddDays(-1).AddHours(13)) && file.Contains("AA"))
.OrderBy(file => new FileInfo(file).CreationTime.Date)
.ToArray();
我错过了什么?
答案 0 :(得分:3)
DateTime.Now.Date.AddDays(-1).AddHours(13)
将在下午1点返回...但是您正在检查new FileInfo(file).CreationTime.Date
,它总是在午夜...对于昨天创建的文件,它将是昨天午夜。
所以是的,你要过滤掉那个文件。如果您从.Date
移除了new FileInfo(file).CreationTime
部分,那可能就是您需要做的全部内容。
作为旁注,我会使用DateTime.Today
代替DateTime.Now.Date
,我也会尝试避免多次评估。我也会使用DirectoryInfo
并坚持FileInfo
条目,因为你已经创建了这两个条目。我会将您的查询重写为:
var cutoff = DateTime.Today.AddDays(-1).AddHours(13);
FileInfo[] files = new DirectoryInfo(FBD.SelectedPath).GetFiles("*.xls")
.Where(file => file.CreationTime >= cutoff)
.OrderBy(file => file.CreationTime)
.ToArray();