有幾種方法可以檢測文件中的更改。有些人比其他人更容易被愚弄。這聽起來不像是一個安全問題;更多 如同誠信假設,你只需要檢測變化而不需要 不得不智勝對手。
你可以看看時間戳。如果文件沒有被重命名,這是檢測更改的好方法 。如果它們被重新命名,單獨的時間戳就不足以可靠地將另一個文件告訴一個文件。 os.stat
會告訴你 上次修改文件的時間。
您可以查看inode,例如ls -li
。如果更改涉及創建新文件並刪除舊文件,則文件的inode編號可能會更改爲 ;例如,這是 emacs
通常如何更改文件。嘗試使用組織使用的標準工具更改文件 ,並在 之前和之後比較inode;但請記住,即使這次沒有改變,它在某些情況下可能會改變。 os.stat
會告訴你inode 號碼。
您可以查看文件的內容。 cksum
計算一個文件上的一個小的CRC校驗和 ;如果有人願意,很容易擊敗。程序 等sha256sum
計算安全散列;在不更改這種散列的情況下更改文件 是不可行的。如果文件很大,這可能會很慢。 hashlib
模塊將計算幾種安全哈希。
如果一個文件被重命名和改變,其索引節點號的變化,這將 可能非常難以與它曾經 是,該文件匹配起來,除非該文件中的數據包含某種一成不變的和 唯一標識符。
考慮併發性。程序運行時,有人可能會更改 文件嗎?謹防競態條件。
它會是遠不及複雜的,如果你能保證你的程序將運行所有的時間,不是存儲時,它不是,然後試圖重新掃描更改... – 2014-08-30 21:43:46
@JonClements是的,但不幸的是這是不可能的。基本上,用戶確定程序何時運行。這是該計劃的性質。 – 2014-08-30 21:52:25
只需創建一個包含文件名和最後修改日期的字典(可以使用'os.stat()'獲得),然後將其寫入一個文件並在每次運行時讀取它 – wnnmaw 2014-08-30 22:10:46