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

Delphi 2010 - Watchfolder - Check if a file is in use - Add item to listbox while the listbox is in loop

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

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

就会导致边界错误

也就是说,解决方案很简单 - 在循环浏览其内容时不要修改 ListBox!您将必须:

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

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