保持文件差异在内存中的好方法

时间:2016-06-07 14:31:10

标签: c# filepath

我有12个媒体文件和一些短音乐。这些文件是如何区分的,因为所有(我的意思是从开始到结束的一个文件内容)相同的内容或不同的内容。

文件名是:

  1. a1_same.wav //从头到尾它包含相同的内容
  2. a2_diff.wav //从头到尾它包含不同的内容
  3. a3_diff.wav
  4. a4_diff.wav
  5. a5_same.wav ...... 直到12日。
  6. 现在我读取所有这些文件并迭代文件名以区分 如果内容相同或差异

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

    但是我对这种检查不满意(用相同或不同的文件名字符串检查)。

    有没有其他方法可以做同样的事情?我的意思是保留一些说主键在内存中或维护一些在内存字典或列表等...老实说,我没有任何线索: - (

    如果您有任何想法,请分享。

1 个答案:

答案 0 :(得分:2)

您可以使用散列函数(如MD5)快速查找文件的物理内容是否相同。

散列函数接受一段输入数据(文件内容)并通过可重复算法运行它,该算法在给定相同输入数据的情况下始终返回相同的值,但如果输入数据在任何输入数据中,则将返回不同的值方式不同。

此技术通常由下载站点和内容分发商使用,以帮助下载程序验证文件未被破坏或篡改,因为它们可以将接收文件的哈希值与文件提供的已发布哈希值进行比较主机。

编辑:请注意,这依赖于二进制相等的文件,它不是音频比较,不适用于包含相同音频剪辑但在开始时具有不同数量的静音导入或导出的文件和剪辑结束,或者它们是不同的比特率或文件中有不同的元数据(MP3标签等)。

MD5 - Wikipedia, the free encyclopedia