文件已更改事件网络共享

时间:2013-02-23 20:51:05

标签: python windows events python-3.3

我想做什么:

我有两个目录。每个包含大约90.000 xml和bak文件。

当文件发生变化时,我需要在两个文件夹中同步xml文件(当然应该复制较新的文件)。

问题是:

由于存在大量文件以及其中一个目录是网络共享这一事实,我不能只通过目录循环并比较os.path.getmtime(file)值。

即使看门狗和PyQt也不起作用(尝试过herehere的解决方案。)

问题:

是否有其他方法可以获取文件更改事件(在Windows系统上),这些事件适用于那些配置而不会循环所有这些文件?

5 个答案:

答案 0 :(得分:1)

......中的代码

https://stackoverflow.com/a/12345282/976427

通过网络共享时似乎对我有用。

答案 1 :(得分:1)

我冒着在这里给出答案的风险(你没有说明关于速度的要求等),但...... Dropbox会为你免费做到这一点,并且需要写不代码。

当然,如果您需要实时同步,或者您希望避免与第三方“共享”文件(尽管您可以先加密它们),它可能不适合您的需求。

答案 2 :(得分:1)

所以我终于找到了解决方案: 我更改了部分网络共享设置并使用了FileSystemWatcher

为防止文件在同步时同步,请使用md5 filehash。

我使用的代码可以在pastebin找到(这是一个快速而又脏的代码,只是这里提到的问题部分)。

答案 3 :(得分:0)

您可以在此页面上使用第二个选项吗?

http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html

答案 4 :(得分:0)

从提到看门狗,我假设您在Linux下运行。对于本地机器inotify可以提供帮助,但对于网络共享你运气不好。 Mercurial的inotify扩展http://hgbook.red-bean.com/read/adding-functionality-with-extensions.html具有相同的限制。

在类似的情况下(10K +文件)我在服务器和本地机器上都使用了带有inotify的克隆mercurial存储库。他们会自动提交并相互通知更改。它有一点延迟(在我的情况下没问题),但作为一个好人有一个完整的历史 在其中一个系统停机后,变化很容易恢复。