【发布时间】:2009-11-03 14:40:35
【问题描述】:
我想检查某个文件是否存在于网络驱动器上。但是如果驱动器断开连接,FileExists 太慢了。如何在超时时检查它?
欢迎提供示例。
【问题讨论】:
标签: windows delphi networking
我想检查某个文件是否存在于网络驱动器上。但是如果驱动器断开连接,FileExists 太慢了。如何在超时时检查它?
欢迎提供示例。
【问题讨论】:
标签: windows delphi networking
【讨论】:
如果您知道文件存在时 FileExists 会快速返回,那么您可以从不同的线程调用 FileExists 并使用自定义超时参数来更快地中止操作。
【讨论】:
问题在于 FileExists 在幕后调用了 CreateFile(实际上是 NtCreateFile),而对 CreateFile 的调用是同步的。
您可能可以通过提取计算机名称并 ping 计算机名称来实现某些目标,但这只会告诉您与计算机关联的 NIC 是否在线,它没有说明远程文件和打印服务的状态机器。您的文件也可能位于 DFS 连接的另一端,在这种情况下您甚至无法确定正确的远程服务器。
最重要的是,这样做真的很有挑战性,你最好按照 despart 所说的去做,然后在另一个线程上调用 FileExists。只要确保在超时时不要尝试清理线程 - TerminateThread 是一个邪恶的 API。
【讨论】: