获取特定文件后的x个文件

时间:2015-02-21 02:06:22

标签: c# linq file fileinfo

我有一个带有Jpeg文件的文件夹,我想要在最后一次编写它们之后将它们一次拉3-4。问题是我想指定一个起始位置(按文件名)并且只从那里拉出来。

带图片的目录示例

  • A.JPG
  • B.JPG
  • C.JPG
  • D.JPG
  • e.jpg
  • f.jpg
  • 等直到j.jpg

现在我想从b.jpg开始获取3个文件,这意味着我想订购文件,搜索特定文件(在本例中为b.jpg),然后获取b之后的3个文件。 jpg(上例中的c.jpg,d.jpg和e.jpg)。

如何使用LINQ或更好的方法找到b.jpg的索引,在同一查询中获取3个文件?

index of file/the files directly = Directory.GetFiles(pathToFiles, "*.jpg").Select(x => new FileInfo(x)).OrderByDescending(x => x.LastWriteTime)... ?

1 个答案:

答案 0 :(得分:0)

您需要查看SkipWhile扩展方法,Skip扩展方法,然后是Take扩展方法。

此外,请改用Directory.EnumerateFiles


var files = Directory.EnumerateFiles(pathToFiles, "*.jpg")
                     .Select(x => new FileInfo(x))
                     .OrderByDescending(x => x.LastWriteTime)
                     .SkipWhile(x => !String.Equals(x.Name, "b.jpg")
                     .Skip(1)
                     .Take(3);

基本上,一旦你有了有序的序列,跳过所有内容,直到你到达“b.jpg”文件,然后跳过那个文件,然后接下来的三个文件。


更新:现在我考虑一下,EnumerateFiles会有所帮助,但不完全是因为你通过排序来否定延迟执行。但是,它仍然只是一个小优势(我认为)。