[英]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.