2016-06-07 75 views
0

我有12個媒體文件和一些短音樂。這些文件是一些如何區分,因爲擁有所有(我的意思是從頭到尾一個文件內容)相同的內容或不同的內容。在內存中保持文件差異的好方法

文件名是:

  1. a1_same.wav //從開始到結束它包含的內容相同
  2. a2_diff.wav //從開始到結束它包含不同的內容
  3. a3_diff。 WAV
  4. a4_diff.wav
  5. a5_same.wav ...... 直到12

現在我讀了所有這些文件,並通過文件名重複,以區分 如果內容相同或區分

// just a pseudo code - syntax may be wrong 
foreach(var file in abcCollection) 
{ 
    if(file.FilePath.Contains("Same")) 
    { 
     // then same 
    } 
    else 
    { 
     // different 
    } 
} 

但我並不滿足於這種檢查與(與文件名字符串檢查相同或不同)。

還有其他辦法可以做同樣的事嗎?我的意思是保持有的說主鍵在內存或維持某些記憶字典或列表等......老實說,我沒有:-(

任何線索,如果您有任何想法,那麼請共享。

回答

2

你可以使用散列函數(如MD5)快速查找文件的物理內容是否相同

散列函數獲取一段輸入數據(文件內容)並通過可重複的算法運行它,該算法將始終返回相同的值給定相同的輸入數據,但是如果輸入數據有任何不同,將返回不同的值。

這種技術通常被下載站點和內容分發商用來幫助下載器驗證文件沒有被破壞或篡改,因爲他們可以將接收到的文件的哈希值與文件主機提供的已發佈哈希值進行比較。

編輯:請注意,這依賴於文件是二進制平等,它不是一個音頻比較,並將不會工作的文件包含相同的音頻剪輯,但有不同數量的沉默導入或導出在片段的開始和結束,或者它們是不同的比特率還是在文件中具有不同的元數據(MP3標籤等)。

MD5 - Wikipedia, the free encyclopedia

+0

對不起,我想你誤解了我的問題。文件內容是不同的或相同的,它的名字就是它自己。但是我需要幫助的是代碼重構下面的代碼:foreach(在abcCollection中的var文件){if(file.FilePath.Contains(「Same」){// then some logic for same files} else {// logic for不同的文件}) – App