如何仅在使用 DirectoryInfo().GetFiles 选择两个日期时计算工作日?
How can I count weekdays only when I am choosing two dates using DirectoryInfo().GetFiles?
我正在尝试找到一个与 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);
}
在此代码中...
.Count(x => x.DayOfWeek != DayOfWeek.Saturday && x.DayOfWeek != DayOfWeek.Sunday);
...x
是 FileInfo
,它没有 DayOfWeek
属性。相反,您需要使用 FileInfo
的三个 *Time
属性中的任何一个是合适的;查看您传递给 .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()
method and the newer EnumerateFiles()
method...
之间的区别
The EnumerateFiles
and GetFiles
methods differ as follows:
- When you use
EnumerateFiles
, you can start enumerating the collection of FileInfo
objects before the whole collection is returned.
- When you use
GetFiles
, you must wait for the whole array of FileInfo
objects to be returned before you can access the array.
Therefore, when you are working with many files and directories, EnumerateFiles
can be more efficient.
EnumerateFiles()
非常适合这种文件系统 search/filtering,并且我认为通常是首选方法。
我正在尝试找到一个与 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);
}
在此代码中...
.Count(x => x.DayOfWeek != DayOfWeek.Saturday && x.DayOfWeek != DayOfWeek.Sunday);
...x
是 FileInfo
,它没有 DayOfWeek
属性。相反,您需要使用 FileInfo
的三个 *Time
属性中的任何一个是合适的;查看您传递给 .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()
method and the newer EnumerateFiles()
method...
The
EnumerateFiles
andGetFiles
methods differ as follows:
- When you use
EnumerateFiles
, you can start enumerating the collection ofFileInfo
objects before the whole collection is returned.- When you use
GetFiles
, you must wait for the whole array ofFileInfo
objects to be returned before you can access the array.Therefore, when you are working with many files and directories,
EnumerateFiles
can be more efficient.
EnumerateFiles()
非常适合这种文件系统 search/filtering,并且我认为通常是首选方法。