这是代码:
// Files has 25 PDF
var Files = Folder.GetFileToPublicFolder(Folder.srcFolder);
foreach (FileInfo file in Files)
{
// Get 10 PDF in Files
List<FileInfo> files = Files.Take(10).ToList();
// Process the 10 PDF
foreach (var item in files)
{
File.Move(Path.Combine(Folder.srcFolder, item.Name), Path.Combine(Folder.tmpFolder, item.Name));
}
files = null;
ProcessParallelThread(e);
}
我的公共文件夹有25个PDF文件。
使用此
List<FileInfo> files = Files.Take(10).ToList();
它将获得 1 - 10 PDF 并进行处理。在foreach循环再次处理 1 - 10 PDF 后,它采用相同的 1 - 10 PDF 而不是 11 - 20 PDF 。
如何获取列表中的其他PDF&lt;&gt;?
提前谢谢你!
答案 0 :(得分:2)
在第一次循环后,您必须致电:
files = Files.Skip(10).Take(10).ToList();
答案 1 :(得分:1)
以名字为建议,只需要10个元素(前10个更具体)如果你不告诉它,第二次接听电话就不会采取不同的10个元素。
如果你想处理10个元素的块,我建议你创建一个进行拆分的方法(Separation of Concerns)
这就是我使用的:
public static class EnumerableExtensions
{
[Pure]
public static IEnumerable<T[]> Split<T>(this IEnumerable<T> source, int chunkSize)
{
T[] sourceArray = source as T[] ?? source.ToArray();
for (int i = 0; i < sourceArray.Length; i += chunkSize)
{
T[] chunk = new T[chunkSize + i > sourceArray.Length ? sourceArray.Length - i : chunkSize];
Array.Copy(sourceArray, i, chunk, 0, chunk.Length);
yield return chunk;
}
}
}
现在你有了一个可以像这样使用的分割方法
var files = Folder.GetFileToPublicFolder(Folder.srcFolder);
foreach(var chunk in files.Split(10))
{
//....
}
答案 2 :(得分:0)
我正在使用您的代码并进行了一些更改,以便在需要时使其能够处理超过20个文件。
// Files has 25 PDF
var Files = Folder.GetFileToPublicFolder(Folder.srcFolder);
int _skip = 0;
foreach (FileInfo file in Files)
{
// Get 10 PDF in Files
List<FileInfo> files = Files.Skip(_skip).Take(10).ToList();
// Process the 10 PDF
foreach (var item in files)
{
File.Move(Path.Combine(Folder.srcFolder, item.Name), Path.Combine(Folder.tmpFolder, item.Name));
}
files = null;
ProcessParallelThread(e);
_skip = _skip + 10;
}
希望它对你有用。