簡體   English   中英

避免重復

[英]Avoid duplication

我希望避免使用基於任何驅動器的內容的重復文件。 文件可以是任何格式。 我不知道用於快速搜索的wat算法以及如何比較所有數據格式。 先生,請幫我

檢查相同內容的一種簡單方法是為兩個文件計算某種校驗和並進行比較。

您可以對文件內容進行MD5計算,然后比較結果。

創建一個Dictionary <>,它將為每個文件長度(以字節為單位)分配文件名列表。 通過遍歷整個驅動器來填充此詞典。

Dictionary<long,List<string>>

現在,您已經按照文件的長度對文件進行了排序。 由於只有相同長度的文件可以相同,所以您已完成90%的工作。 :-)

現在您需要比較文件的內容。 小文件(例如,最大10 MB)通過蠻力進行比較-將相同大小的所有文件加載到內存中,按內容和搜索順序進行排序,以查找重復項。 (復雜度O(n * log2n),其中n是相同大小的文件的數目。)長文件的比較有所不同:僅加載文件的開始部分,例如10 MB,對其進行排序並查找重復項,然后僅繼續處理那些將是相同的。 遞歸繼續-例如,以相同的開頭來調用文件子列表的compariosn函數,加載下一個10 MB,進行排序,比較,遞歸調用等。通過這種方式,您可以獲得很好的速度,並且每個文件僅加載一次,而您不會不需要太多的內存。 選擇10 MB塊是因為它是快速順序讀取和硬盤驅動器查找時間之間的良好折衷。

該算法應該比Max Kielland提出的所有文件的MD5計算更快。 另外,您不需要兩次加載任何內容-如果要使用哈希,則需要加載文件以計算哈希,然后在哈希相同的情況下再次加載,以比較內容以100%確保文件相同。 如果您有100個相同的哈希值,那么如何比較這些文件就會遇到麻煩。 因此,我希望我上面寫的內容沒有散列。

有時重復的內容是有原因的。 不要四處刪除文件而不檢查一切是否仍然有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM