我有一个问题是获取一些日期范围的文件。我在这里搜索并找到了很多答案,但我无法解决我的问题。
所以,我有这个方法来获取这些文件:
DateTime fromDate = tpFrom.Value;
DateTime toDate = tpTo.Value;
var files = new DirectoryInfo(origemPath).GetFiles()
.Where(
f => f.CreationTime.Date >= fromDate &&
f.CreationTime.Date <= toDate);
foreach (var file in files)
{
...
}
但是得到所有文件,忽略了哪里......
fromDate和toDate是DateTimePicker
中的值调试运行
文件中的一个文件:
fromDate value:
编辑:
我在这里尝试了所有答案,但没有任何效果。我怎么不需要最好的性能方法,我解决了我的问题:
var files = new DirectoryInfo(origemPath).GetFiles();
foreach (var file in files)
{
if (file.CreationTime.Date >= fromDate && file.CreationTime.Date <= toDate)
{
...
}
}
答案 0 :(得分:1)
如果tpFrom和tpTp是Pickers,那么以下可能会完成这项工作
DateTime fromDate = tpFrom.Value.Date;
DateTime toDate = tpTo.Value.Date;
答案 1 :(得分:1)
private List<string> GetFiles(DateTime toDate, DateTime fromDate, string directoryName)
{
if (toDate > fromDate)
{
List<string> list = Directory.GetFiles(directoryName).ToList();
return list.Where(f => File.GetCreationTime(f) <= toDate && File.GetCreationTime(f) => fromDate).ToList();
}
return new List<string>();
}
答案 2 :(得分:1)
尝试这样的事情:
private List<string> GetFiles(DateTime toDate, DateTime fromDate, string directoryName)
{
if (toDate > fromDate)
{
List<string> list = Directory.GetFiles(directoryName).ToList();
return list.Where(f => File.GetCreationTime(f) <= toDate && File.GetCreationTime(f) => fromDate).ToList();
}
return new List<string>();
}
答案 3 :(得分:0)
我认为Where子句不会执行,请查看此link.以了解有关它的更多详细信息。在LINQ中,查询的执行通常会推迟到您实际请求数据的那一刻。在files.Count()的行中,您实际获得了值。详细了解LINQ and dererred execution。
您应该尝试以下内容:
DirectoryInfo diInbox = new DirectoryInfo(location);
FileInfo[] InboxFiles = diInbox.GetFiles();
var files = from file in InboxFiles
where file.CreationTime >= FromDate
select file;
foreach (var file in files){...}