如何删除已在.Take()

时间:2016-03-15 07:20:50

标签: c# list file foreach fileinfo

这是代码:

        // 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;?

提前谢谢你!

3 个答案:

答案 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;
        }

希望它对你有用。