[英]C# get only X number of files
我只想在无限循环以下一次处理 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);
}
您可以使用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.Count)
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
}
while (true)
{
var files = new DirectoryInfo(@"path").GetFiles()
.OrderBy(p => p.LastWriteTimeUtc).ToList();
foreach (var f in files)
{
Thread.Sleep(5000);//should be up here
//do some processing
Console.WriteLine(f.Name);
f.Delete();
}
}
thread.sleep 方法不在正确的位置
你总是可以使用 Await Task.Delay() 比 thread.sleep 好得多,因为它会使整个程序冻结,具体取决于你正在做什么
只保留一个柜台。 每次处理文件时,将其增加一个。 当它达到极限时,您就结束了该批次。
while (true)
{
var counter = 0;
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();
counter++;
if (counter >= batchSize)
{
Thread.Sleep(timeBetweenBatches);
counter = 0;
}
}
Thread.Sleep(5000);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.