C# 只获取 X 个文件

use*_*018 1 c#

我想一次只处理 X 个文件以进行以下无限循环。下面的代码一次给我所有文件,如何只获得 X 个文件?

while (true)
{
    var files = new DirectoryInfo(@"path")
                .GetFiles()
                .OrderBy(p => p.LastWriteTimeUtc)
                .ToList();

    foreach (var f in files)
    {
        //do some processing
        Console.WriteLine(f.Name);

        f.Delete();
    }

    Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*kar 9

您可以使用它们的组合来批量处理您的文件Skip() .Take(X)

Skip() :绕过序列中指定数量的元素,然后返回剩余的元素。


Take() :从序列的开头返回指定数量的连续元素。

批量处理文件,

var batchSize = 10;   //Decide batch size I considered 10 files in a batch
var skipBatch = 0     //Skip count
while (true)
{
    var files = new DirectoryInfo(@"path").GetFiles()
       .OrderBy(p => p.LastWriteTimeUtc).ToList(); //store all files

    var skipIntervals = skipBatch * batchSize;
    //Exit condition from infinity loop
    if(skipIntervals > files.Length)
        break;

    var filesInBatch = files.Skip(skipIntervals).Take(batchSize);
    foreach (var f in filesInBatch)
    {
        //do some processing
        Console.WriteLine(f.Name);
        f.Delete();
    }
    Thread.Sleep(5000);
    skipBatch++;  //Increment skipBatch count by 1 as this batch is processed
}
Run Code Online (Sandbox Code Playgroud)