2010-12-18 87 views
0

我有一些將文件移動到同一目錄的代碼。什麼是一個好策略:檢測文件是否重複,如果不是,則重命名

  • 檢測文件是否是目錄中現有文件的副本?這是決定是刪除源還是乾脆離開它。
  • 如果已經存在具有相同名稱但內容不同的目標文件,請重命名源文件?

回答

2

檢測重複文件?

大多數編程語言都會有類似FileExists取一個文件名並返回一個布爾值,指示是否存在文件系統上給定名稱的文件的函數調用的東西。

處理名稱相同但內容不同的文件?

計算兩個文件的SHA1校驗和並比較這些散列。再次,大多數語言都會有一個sha1函數,它接收表示文件內容的字節數組,並返回表示SHA1哈希值的字節數組。

+0

我測試目標文件是否已經存在。我想要做的是以下。如果目標文件存在且相同,則只需忽略源文件。如果目標文件存在但內容不同,請應用一致的重命名算法並在XML或DB中保留原始文件名的跟蹤。 – 2010-12-18 17:12:06

1

那麼,一個簡單的方法就是做一個cyclic redundancy check。有幾種語言具有實現此功能的功能。您也可以計算文件的md5總和。雖然這不是100%可靠的。

如果您需要檢查它們是否是IDENTICAL,則需要打開兩個文件的流,然後逐字節比較它們。

檢查重複的文件名是顯而易見的,比較它們。

編輯:如果您有很多文件,請比較文件大小。如果不匹配,則不能相等。

+0

謝謝alexn。爲什麼CRC32和MD5不是100%可靠的?我目前正在使用md5來檢查文件是否已被正確複製爲故障安全。我還在考慮在添加文件時檢查MD5列表。但是,如果有大量文件,這種方法可能會變得效率低下。這可以通過使用算法來減少比較次數來解決。至於相同的文件名,我想保留一個原始文件名(可能在一個數據庫中)的痕跡,並用另一個名字複製它。 – 2010-12-18 17:05:00

+1

他們可能導致衝突。你處理的文件有多大? – alexn 2010-12-18 17:07:04

1

如果您不需要原始文件名,作爲一個方便的方法,只需計算文件「content」的MD5或SHA1散列並將文件重命名爲它。 :-)

+0

這不是一個壞主意。這會使文件名稱不易讀取,但會避免重複名稱。另外,如果alexn已經解釋了可以添加後綴,那麼會發生碰撞。 – 2010-12-18 17:19:13

相關問題