我想实现接收Directory
作为参数的函数和表示文件数量的integer
并返回此Direttory
所以我有这个功能:
public static IEnumerable<string> EnumerateDirectories(string parentDirectory, string searchPattern, SearchOption searchOpt, int numberOfFiles)
{
try
{
var directories = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
directories = Directory.EnumerateDirectories(parentDirectory).SelectMany(x => EnumerateDirectories(x, searchPattern, searchOpt));
}
return directories.Concat(Directory.EnumerateDirectories(parentDirectory, searchPattern));
}
catch (UnauthorizedAccessException)
{
return Enumerable.Empty<string>();
}
}
使用此Linq
:
var directory = new DirectoryInfo("C:\\MyDirectory");
var myFile = (from f in directory.GetFiles()
orderby f.LastWriteTime descending
select f).First();
答案 0 :(得分:7)
您可以使用Enumerable.Take
:
var myFiles = (from f in directory.GetFiles()
orderby f.LastWriteTime descending
select f).Take(numberOfFiles);
或方法语法:
myFiles = directory.GetFiles().OrderByDescending(f => f.LastWriteTime).Take(numberOfFiles);
这将返回尽可能多的文件(最大numberOfFiles
)。如果你想要三个,但只有两个你得到两个。
答案 1 :(得分:2)
我可以控制返回文件的数量,还是仅返回?
是。使用Enumerable.Take
如果我的文件夹只包含2个文件并且我想要最新的3个,会发生什么 文件?
使用.Take(3)
,它只会返回2个文件。不会有例外。
var myFile = (from f in directory.GetFiles()
orderby f.LastWriteTime descending
select f).Take(3);
或使用方法语法:
var myFile = directory.GetFiles()
.OrderByDescending(f => f.LastWriteTime)
.Take(3);