Delphi 2010 - Watchfolder - 检查文件是否正在使用 - 在列表框处于循环状态时将项目添加到列表框

时间:2015-01-29 19:44:25

标签: delphi delphi-2010

我正在尝试使用Delphi 2010创建一个watchfolder应用程序。 在主窗体上我添加了2个列表框和一个计时器。 我列出了特定文件夹中的所有文件。 每隔5秒我就会检查列表框中的文件,看看哪个文件仍在使用中。 Listbox1保存正在使用的文件,listbox2保存未使用的文件。 如果有一个正在使用的文件(例如:它仍然被复制到该文件夹​​),我将它添加到listbox1。 如果我监控的那个文件夹中的文件没有被使用,那么我将它们添加到listbox2。 问题是我在listbox2上执行循环,以便将列出的所有文件发送到ftp(对于i:= 0到listbox2.items.count-1 do ....)。 如果我在执行循环时向listbox2添加一个文件,我会得到" List索引超出界限"? 如何在执行循环时将项添加到listbox2循环? 非常感谢? 关于表情符号的任何其他建议吗?

1 个答案:

答案 0 :(得分:0)

for循环的控制值仅在循环开始时计算一次。向列表添加条目不应该导致边界错误,因为Count不会缩小。当循环到达旧Count时,循环将停止。但是,删除项目会缩小Count,因此一旦循环超过尝试到达旧Count的新Count,就会导致边界错误。

话虽如此,解决方案很简单 - 在循环浏览内容时不要修改ListBox!你必须要么:

  1. 延迟任何修改,直到循环结束。

  2. 将当前的ListBox内容复制到一个单独的TStringList并直接遍历它而不是ListBox,然后您可以在循环繁忙时对ListBox执行任何操作。