2012-04-02 43 views
0

我試圖實現讀取某個目錄的內容(文件和文件夾)並將其寫入數據庫的腳本。我的目標是創建一個軟件,使我能夠將這些文件和文件夾與描述和標記相關聯,而不會影響磁盤中的對應物理文件。 但現在我面臨一個邏輯問題:如何在該物理文件和數據庫寄存器之間建立直接連接?即使物理文件由於某種原因被編輯或移動到根目錄內的另一個文件夾中,該軟件仍然能夠將該文件與其在數據庫中的原始寄存器相關聯。如何將文件鏈接到數據庫?

我的第一個想法是使用校驗和散列來標識每個文件,但是,我猜如果文件被編輯,散列也是這樣,不是嗎?除此之外,我還認爲文件夾本身不能以這種方式進行檢查。

我想到的另一個解決方案是在目錄中的每個文件和文件夾名稱的開頭應用一個唯一鍵。這可能有用,但在我看來,這似乎是一種即興解決方案,因此,我希望可能有另一種方式來做到這一點,我還沒有考慮過。 有沒有人有關於此的建議?

+1

'http:// stackoverflow.com/questions/511463/monitor-directory-for-changes',假設你在「* nix」 – sakhunzai 2012-04-02 14:12:21

+0

非常感謝@sakhunzai。是的,我應該知道,實際上該目錄位於本地Linux服務器上,該服務器通過Samba將其內容分享給Windows。 – 2012-04-02 14:19:57

回答

1

在Linux下,您可以通過inode跟蹤文件,如果文件被移動或重命名,該文件不會改變。你甚至可以get notified when a file changes

你有沒有考慮過將文件存儲在數據庫中?

+0

謝謝!我不知道inotify。我現在正在閱讀,看起來不錯。 – 2012-04-02 14:21:30

+0

好的。在進行一些測試後,inode號碼可以滿足我的所有需求。創建文件或文件夾時,會創建inode編號,並且只有在刪除了引用的文件或文件夾時纔會刪除它。移動或編輯文件後,它也保持不變。 – 2012-04-02 17:00:59

0

你不行。

它看起來沒有辦法識別該文件:既不按內容也不按路徑名。

一種解決方法可能是:使用路徑ID(並以此作爲在DB查詢),不要使用系統工具(如mv)移動文件,但你自己的腳本,更新文件系統和數據庫。

相關問題