我想要做什么:文件更改事件网络共享
我有两个目录。每个包含大约90.000 xml和bak文件。
我需要xml文件在文件更改时在两个文件夹同步(当然应该复制新的文件)。
的问题是:
由于文件量庞大和事实目录之一是网络共享,我不能只是循环尽管目录和比较os.path.getmtime(file)
值。
即使看门狗和PyQt不工作(尝试从here和here解决方案)。
问题:
是否有任何其他方式来获取文件更改事件(Windows系统),无需循环尽管所有这些文件对于那些配置工作?
我想要做什么:文件更改事件网络共享
我有两个目录。每个包含大约90.000 xml和bak文件。
我需要xml文件在文件更改时在两个文件夹同步(当然应该复制新的文件)。
的问题是:
由于文件量庞大和事实目录之一是网络共享,我不能只是循环尽管目录和比较os.path.getmtime(file)
值。
即使看门狗和PyQt不工作(尝试从here和here解决方案)。
问题:
是否有任何其他方式来获取文件更改事件(Windows系统),无需循环尽管所有这些文件对于那些配置工作?
所以,我终于找到了解决办法: 我改变了我的一些网络共享设置和使用的FileSystemWatcher
为了防止文件得到同步的同步我使用的是MD5 filehash。
我使用的代码可以在pastebin找到(这是一个快速和肮脏的代码,只是在这里的问题中提到的部分)。
我试过了,但它没有返回任何东西给网络共享(至少在我的配置中) – chill0r 2013-02-23 22:22:10
我敢冒险给出一个答案,这里的路(你没有指定速度等要求),但... Dropbox会为你免费完成,并且根本不需要编写任何代码。
当然,如果你需要实时同步,或者你想避免与第三方“共享”文件(尽管你可以先加密),它可能不适合你的需要。
从提到看门狗,我假设你在Linux下运行。对于本地机器来说,inotify可以提供帮助,但对于网络共享而言,您运气不佳。 Mercurial的inotify扩展http://hgbook.red-bean.com/read/adding-functionality-with-extensions.html具有相同的限制。
在类似的情况下(10K +文件),我在服务器和本地机器上都使用了一个克隆的mercurial存储库,其中包含inotify。他们自动提交并通知对方的变化。它有一个小小的延迟(对我来说没有问题),但作为一个好处,有一个完整的历史记录变化,并且在其中一个系统关闭后很容易重新生成。
我非常怀疑你可以从网络共享中获得有意义的文件系统通知。 – millimoose 2013-02-23 21:38:58
这就是为什么我在这里问的问题......如果没有办法在当前配置上执行此操作,我可能会切换到ftp并使用ftplib获取时间+文件 – chill0r 2013-02-23 22:23:01
您可以创建在两台机器上运行的服务,文件夹;当文件发生变化时,捕获这个事件(或者使用@ Jon-Eric链接中的最后一个例子,或者使用C#编写一个服务并使用FIleSystemWatcher组件。 当您检测到更改时,将此更改写入文件或消息队列或数据库或任何其他机器,并让其他机器轮询,以获得重新同步的文件列表。 但是,当您更改文件时,您还需要为“同步”的工作原理构建一些协议同时在两台电脑:) – 2013-02-24 13:58:23