我想要做什麼:文件更改事件網絡共享
我有兩個目錄。每個包含大約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