【问题标题】:Delphi 2010 - Watchfolder - Check if a file is in use - Add item to listbox while the listbox is in loopDelphi 2010 - Watchfolder - 检查文件是否正在使用 - 在列表框循环时将项目添加到列表框
【发布时间】:2015-01-29 19:44:24
【问题描述】:

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

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

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

    话虽如此,解决方案很简单 - 在循环浏览列表框的内容时不要修改列表框!您必须:

    1. 将任何修改延迟到循环完成之后。

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

    【讨论】:

    • 谢谢。还有一个问题?如何评估循环何时结束?
    • 嗯,循环什么时候停止运行?我不明白你在问什么。你甚至了解循环是如何工作的吗? Control Loops
    • 感谢您的回答和链接。我会研究它。我只是编程的初学者。我有很多东西要学。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    相关资源
    最近更新 更多