Как я могу считать дни недели, только когда выбираю две даты, используя DirectoryInfo (). GetFiles? - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь найти функцию, которую можно использовать с функцией DirectoryInfo().GetFiles для подсчета только дней недели, когда я ищу файлы в диапазоне дат.

Единственная найденная функция -

.Count(x => x.DayOfWeek != DayOfWeek.Saturday && x.DayOfWeek != DayOfWeek.Sunday);

, что несовместимо с fileInfos.Where

DateTime d1 = DateTime.Now;
d2 = d1.AddDays(FileAgeYounger);
DateTime d3 = DateTime.Now;
d4 = d3.AddDays(FileAgeOlder);

if (subfolders == true & 
    FileExtension != null & 
    Fileprefix != null & 
    FileUseRelativeAgeOlder == true & 
    FileUseRelativeAgeYounger == false & CountWeekDays == true)
{
    FileInfo[] fileInfos = new DirectoryInfo(FolderLocation).GetFiles("*.*", SearchOption.AllDirectories);
    IEnumerable<FileInfo> files = fileInfos.Where((f) => f.Extension.Equals(FileExtension)
                                                      && f.Name.StartsWith(Fileprefix)
                                                      && f.CreationTime >= d3
                                                      && f.CreationTime <= d4);
}                        

1 Ответ

2 голосов
/ 20 февраля 2020

В этом коде ...

.Count(x => x.DayOfWeek != DayOfWeek.Saturday && x.DayOfWeek != DayOfWeek.Sunday);

... x - это FileInfo, у которого нет свойства DayOfWeek. Вместо этого вам нужно использовать любое из трех *Time свойств FileInfo; глядя на условие, которое вы передали .Where(), которое выглядит как CreationTime ...

int count = files.Count(x => x.CreationTime.DayOfWeek != DayOfWeek.Saturday && x.CreationTime.DayOfWeek != DayOfWeek.Sunday);

В качестве альтернативы, этот код можно заставить работать, используя .Select() для получить только желаемое *Time свойство ...

int count = files
    .Select(f => f.CreationTime)
    .Count(x => x.DayOfWeek != DayOfWeek.Saturday && x.DayOfWeek != DayOfWeek.Sunday);

В этом случае x является DateTime.

Кроме того, имейте в виду различия между старшими GetFiles() метод и более новый EnumerateFiles() метод ...

Методы EnumerateFiles и GetFiles отличаются следующим образом:

  • Когда вы используете EnumerateFiles, вы можете начать перечисление коллекции FileInfo объектов до того, как будет возвращена вся коллекция.
  • Когда вы используете GetFiles, вы должны подождать всю массив FileInfo объектов, которые должны быть возвращены до того, как вы получите доступ к массиву.

Поэтому, когда вы работаете со многими файлами и каталогами, EnumerateFiles может быть более эффективным.

EnumerateFiles() хорошо подходит для такого вида поиска / фильтрации файловой системы и, как мне кажется, обычно предпочтительнее для использования. * 1 053 *

...