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

Get most recent file with a certain prefix

我正在尝试从也具有特定前缀的目录中获取最新文件。如果我不在 getfiles() 之后放置搜索字符串重载,我可以成功使用该代码,但如果我确实使用它,我会收到一个异常说明:

An unhandled exception of type 'System.InvalidOperationException' has occurred in System.Core.dll

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

使用方法语法和 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() 将 return 找到的第一个元素或 null 如果未找到任何项目,因此您需要执行检查以确保在继续之前你找到了一些东西:

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

只需使用 FirstOrDefault() 而不是 First()

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

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

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

正如您提到的,您想要查找具有特定前缀的文件,因此将通配符 * 添加到您的前缀中。查找以某个前缀开头的所有文件。

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

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