我正在尝试使用Delphi 2010创建一个watchfolder应用程序。 在主窗体上我添加了2个列表框和一个计时器。 我列出了特定文件夹中的所有文件。 每隔5秒我就会检查列表框中的文件,看看哪个文件仍在使用中。 Listbox1保存正在使用的文件,listbox2保存未使用的文件。 如果有一个正在使用的文件(例如:它仍然被复制到该文件夹),我将它添加到listbox1。 如果我监控的那个文件夹中的文件没有被使用,那么我将它们添加到listbox2。 问题是我在listbox2上执行循环,以便将列出的所有文件发送到ftp(对于i:= 0到listbox2.items.count-1 do ....)。 如果我在执行循环时向listbox2添加一个文件,我会得到" List索引超出界限"? 如何在执行循环时将项添加到listbox2循环? 非常感谢? 关于表情符号的任何其他建议吗?
答案 0 :(得分:0)
for
循环的控制值仅在循环开始时计算一次。向列表添加条目不应该导致边界错误,因为Count
不会缩小。当循环到达旧Count
时,循环将停止。但是,删除项目会缩小Count
,因此一旦循环超过尝试到达旧Count
的新Count
,就会导致边界错误。
话虽如此,解决方案很简单 - 在循环浏览内容时不要修改ListBox!你必须要么:
延迟任何修改,直到循环结束。
将当前的ListBox内容复制到一个单独的TStringList并直接遍历它而不是ListBox,然后您可以在循环繁忙时对ListBox执行任何操作。