指数超出范围。必须是非负数或小于集合的大小

时间:2015-06-22 07:52:09

标签: c#

尝试在C#中运行删除应用程序。如果目录中有超过10个文件,请删除最旧的文件,然后再次迭代。然后继续,直到只剩下10个文件。前几天,我在Trying to delete files older than X number of days on insert in .NET MVC

找到了foreach循环中的帮助

现在尝试在for循环中执行此操作。在运行时,我得到“必须是非负数且小于集合的大小”,但“索引” 小于集合,目前为“16”。

static void Main()
{
    DirectoryInfo dir = new DirectoryInfo(@"N:/Bulletins/October");
    List<FileInfo> filePaths = dir.GetFiles().OrderBy(p => p.CreationTime).ToList();
    for (int index = filePaths.Count(); filePaths.Count() > 9; index--)
    {
        Console.WriteLine(index);
        filePaths[index].Delete();
        filePaths.RemoveAt(index);
    }
}

有什么想法吗?

由于

编辑:

我应该提一下,“foreach”循环是基于它是否超过10天,但我们意识到两个星期的假期将彻底清除整个地段,我们希望保留以前10个文件

1 个答案:

答案 0 :(得分:2)

看起来你的循环条件中有一个拼写错误:

for (int index = filePaths.Count(); filePaths.Count() > 9; index--)

应该是

for (int index = filePaths.Count() - 1; index > 9; index--)

另请注意,对于循环的第一次迭代,您尝试访问filePaths[filePaths.Count()],这显然不存在,因为C#中的数组基于零。所以它应该是filePaths.Count() - 1作为起始索引。