使用拉姆达表达式进行文件搜索
对于这个问题,我提前表示歉意,但是我迟到了,并且我很累。我有一个简单的问题需要解决,但我不能拿出答案。我有两个标准:1)在文件名符合特定条件的目录中查找文件,2)仅考虑具有今天创建时间的文件。有很多关于这两个标准的帖子,但没有一个将它们放在一起。这是我一起做的代码(请对我很好)。使用拉姆达表达式进行文件搜索
string fooDay = DateTime.Now.ToString("dd");
string fooMonth = DateTime.Now.ToString("MM");
string fooYear = DateTime.Now.ToString("yyyy");
List<string> T340Basics = new List<string>();
T340Basics = Directory.GetFiles(@"\\10.0.0.73\shared\340B\340Basics\OUT\out_archive", @"340B_Captured_Claim_File*.txt").Where(a => (a.CreationTime.Month == fooMonth && a.CreationTime.Day == fooDay && a.CreationTime.Year == fooYear)).ToList();
此错误列于Lambda表达式的CREATIONTIME部件,该错误是:字符串不包含一个定义为“CreationTime'and没有扩展方法‘CREATIONTIME’接受型的第一参数‘字串’能被发现。
就像我说的,我知道这个必须简单,我只是无法弄清楚。任何帮助都感激不尽。
可以使用DirectoryInfo
,而不是静态Directory.GetFiles
因为GetFiles
(上DirectoryInfo
)returnes的FileInfo[]
而不是string[]
。
使用方法如下:
DirectoryInfo info = new DirectoryInfo(@"\\10.0.0.73\shared\340B\340Basics\OUT\out_archive");
if(info.Exists)
{
info.GetFiles(@"340B_Captured_Claim_File*.txt", <OptionalSearchOption>).Where(file => file.CreationDate.Date == DateTime.Now.Date).ToList();
}
您也可以缩短你的模式是这样的:
file => file.CreationDate.Date == DateTime.Now.Date
只是比较两个Date(设置时间成分为00:00:000两DateTime对象)。
问题是这个目录中有很多文件,所以我想尽量减少循环。如果info.GetFiles给了我一些方法来过滤我上面发布的标准,我很乐意听到它。 –
试试吧!和'Directory.GetFile()'几乎相同的选项,你也可以在这里设置一个'SearchPattern'和一些'SearchOptions'。 –
难道你不能'a.CreationTime.Date = DateTime.Now.Date'? –
'fooDay'是一个字符串,'CreationTime.Year'不是。您无法将它们与'=='进行比较 – Guy
问题是,对a.CreationTime的引用给我提供了我在原始描述中列出的错误。 –