2016-06-07 81 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