如何使用日期范围获取目录中的文件?

时间:2018-07-25 09:08:11

标签: c#

我想到的可能的解决方案是这样的:

var dateFiles = Directory.GetFiles(filesPath)
    .Where(x => new FileInfo(x).CreationTime.Date >= startDate && 
                new FileInfo(x).CreationTime.Date <= endDate);

我是=>语法的新手,我不确定如何将new FileInfo(x).CreationTime.Date放入变量中,因此不必初始化两次。另外,请告诉我是否还有更好的解决方案。非常感谢。

4 个答案:

答案 0 :(得分:2)

您可以使用DirectoryInfo代替Directory,这将返回FileInfo的数组(与从Directory.GetFiles方法获得的字符串数组相比):< / p>

var directoryInfo = new DirectoryInfo(filesPath);
var dateFiles = directoryInfo.EnumerateFiles()
                .Where(x => x.CreationTime.Date >= startDate && x.CreationTime.Date <= endDate)
                .Select(f => f.Name);

答案 1 :(得分:1)

让我们添加Select,将fileName转换为匿名类型实例,在其中可以存储 name和{ {1}}:

date

请注意var dateFiles = Directory .EnumerateFiles(filesPath) .Select(fileName => new { // given fileName name = fileName, // store name date = new FileInfo(fileName).CreationTime.Date // ... and date }) .Where(file => file.date >= startDate && // filter by date file.date <= endDate) .Select(file => file.name); // finally, we want name only :我们不想等待所有的文件都被收集到,但可以处理一个接一个的文件。

答案 2 :(得分:0)

您还可以将config = tf.ConfigProto() config.intra_op_parallelism_threads = 2 tf.Session(config=config) 中的lambda表达式变成语句主体:

Where

答案 3 :(得分:0)

我会做一些紧凑的事情:

DateTime start = new DateTime(2010, 1, 1);
DateTime end = new DateTime(2017, 1, 1);
string[] files = Directory.GetFiles(@"C:\", "*")
       .Where(
          f => new FileInfo(f).CreationTime.Date >= start && 
               new FileInfo(f).CreationTime.Date <= end
        ).ToArray();