【发布时间】:2017-10-13 12:51:02
【问题描述】:
我正在编写一个侦听位置的工具,最好是远程位置,如果创建了新文件夹或文件,它会将其下载到本地位置。
目前我正在使用FileSystemWatcher 监听远程文件夹,当创建新文件夹/文件时,我启动一个计时器,如果计时器达到 X 分钟,它开始将其复制到本地。
在“watched”文件夹中创建一个新文件夹或文件会触发FileSystemWatcher.Changed,但如果有很多子目录并且如果有一个大文件复制到被监视的文件夹,它有时会失败,它只会在复制开始和我的计时器时检测到它可以完成,直到完成。
所以: 我有 3 台远程计算机/位置,A、B、C
A 开始将一些文件夹/文件复制到 B 和 C 听 B 。
C 如何检查 A 是否在有或没有FileSystemWatcher 的情况下完成复制?
我不想经常比较 B 和 C 并复制其余文件。
【问题讨论】:
-
如果可行,您可以在复制时使用临时 xxx.$$$tmp 文件名,并在复制操作完成后重命名为原始文件名。然后,您可以定期扫描目标计算机上不存在的非临时文件。
-
几乎每一个关于 FSW 的问题,而且有很多,讨论这个问题。计时器没有任何意义,您不知道其他进程正在忙于复制文件,它在哪台机器上运行以及需要多长时间。保留计时器,但将其间隔设置为较低的值,例如 100 毫秒。并不断尝试,最终您可以打开文件。