尝试在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个文件
答案 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
作为起始索引。