我有一些將文件移動到同一目錄的代碼。什麼是一個好策略:檢測文件是否重複,如果不是,則重命名
- 檢測文件是否是目錄中現有文件的副本?這是決定是刪除源還是乾脆離開它。
- 如果已經存在具有相同名稱但內容不同的目標文件,請重命名源文件?
我有一些將文件移動到同一目錄的代碼。什麼是一個好策略:檢測文件是否重複,如果不是,則重命名
檢測重複文件?
大多數編程語言都會有類似FileExists
取一個文件名並返回一個布爾值,指示是否存在文件系統上給定名稱的文件的函數調用的東西。
處理名稱相同但內容不同的文件?
計算兩個文件的SHA1校驗和並比較這些散列。再次,大多數語言都會有一個sha1函數,它接收表示文件內容的字節數組,並返回表示SHA1哈希值的字節數組。
那麼,一個簡單的方法就是做一個cyclic redundancy check。有幾種語言具有實現此功能的功能。您也可以計算文件的md5總和。雖然這不是100%可靠的。
如果您需要檢查它們是否是IDENTICAL,則需要打開兩個文件的流,然後逐字節比較它們。
檢查重複的文件名是顯而易見的,比較它們。
編輯:如果您有很多文件,請比較文件大小。如果不匹配,則不能相等。
謝謝alexn。爲什麼CRC32和MD5不是100%可靠的?我目前正在使用md5來檢查文件是否已被正確複製爲故障安全。我還在考慮在添加文件時檢查MD5列表。但是,如果有大量文件,這種方法可能會變得效率低下。這可以通過使用算法來減少比較次數來解決。至於相同的文件名,我想保留一個原始文件名(可能在一個數據庫中)的痕跡,並用另一個名字複製它。 – 2010-12-18 17:05:00
他們可能導致衝突。你處理的文件有多大? – alexn 2010-12-18 17:07:04
如果您不需要原始文件名,作爲一個方便的方法,只需計算文件「content」的MD5或SHA1散列並將文件重命名爲它。 :-)
這不是一個壞主意。這會使文件名稱不易讀取,但會避免重複名稱。另外,如果alexn已經解釋了可以添加後綴,那麼會發生碰撞。 – 2010-12-18 17:19:13
我測試目標文件是否已經存在。我想要做的是以下。如果目標文件存在且相同,則只需忽略源文件。如果目標文件存在但內容不同,請應用一致的重命名算法並在XML或DB中保留原始文件名的跟蹤。 – 2010-12-18 17:12:06