获取具有特定前缀的最新文件
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
是否不为空,如果不为空则它将包含与特定前缀匹配的最新文件。
我正在尝试从也具有特定前缀的目录中获取最新文件。如果我不在 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
是否不为空,如果不为空则它将包含与特定前缀匹配的最新文件。