获取具有特定前缀的最新文件

时间:2016-04-26 14:29:03

标签: c# fileinfo

我正在尝试从也具有特定前缀的目录中获取最新文件。如果我没有在getfiles()之后将搜索字符串重载,我能够成功使用代码,但如果我使用它,我会得到一个例外说明:

  

未处理的类型' System.InvalidOperationException'具有   发生在System.Core.dll

1982-09-20

3 个答案:

答案 0 :(得分:2)

嗯,你需要向自己提几个问题。

如果没有匹配的文件怎么办?您当前的实施是否有效?没有。它会崩溃。为什么?因为.First()运算符。

正如您所提到的,您希望查找具有特定前缀的文件,因此请在您的前缀中添加通配符*。查找以某些前缀开头的所有文件。

FileInfo mostrecentlog = (from f in logDirectory.GetFiles("your_pattern*") orderby
                                      f.LastWriteTime descending select f).FirstOrDefault();

现在检查mostrecentlog是否为空,如果它不为空,则它将包含与您的最新文件匹配的特定前缀。

答案 1 :(得分:1)

使用方法语法可能会使这个读取更容易,同时使用Where()子句来指定您要搜索的内容:

// You must specify the path you want to search ({your-path}) when using the GetFiles()
// method.
var mostRecentFile = logDirectory.GetFiles("{your-path}")
                                 .Where(f => f.Name.StartsWith("Receive"))
                                 .OrderByDescending(f => f.LastWriteTime)
                                 .FirstOrDefault();

同样,您可以在Directory.GetFiles()方法中指定搜索模式作为第二个参数:

// You can supply a path to search and a search string that includes wildcards
// to search for files within the specified directory
var mostRecentFile = logDirectory.GetFiles("{your-path}","Receive*")
                                 .OrderByDescending(f => f.LastWriteTime)
                                 .FirstOrDefault();

重要的是要记住FirstOrDefault()将返回找到的第一个元素,如果没有找到任何项目,则返回null,因此您需要执行检查以确保在继续之前找到了一些内容:

// Get your most recent file
var mostRecentFile = DoTheThingAbove();
if(mostRecentFile != null)
{
      // A file was found, do your thing.
}

答案 2 :(得分:0)

只需使用FirstOrDefault()代替First()

FileInfo mostrecentlog = (from f in logDirectory.GetFiles("Receive") orderby f.LastWriteTime descending select f).FirstOrDefault()