飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 9474|回复: 25

[原创] Duplicate MP3 Finder Plus简单算法分析

[复制链接]
  • TA的每日心情
    开心
    2019-2-27 15:18
  • 签到天数: 205 天

    [LV.7]常住居民III

    发表于 2016-11-2 10:39:58 | 显示全部楼层 |阅读模式
    本帖最后由 yosen2001 于 2016-11-2 10:39 编辑

    软件名称:Duplicate MP3 Finder Plus
    官方网站:http://duplicatefilefinder4pc.com
    官方下载:http://duplicatefilefinder4pc.com/duplicate-mp3-finder-plus.htm


    Description


    Duplicate MP3 Finder Plus - Quickly finds the duplicate audio on your drives relied on their content, you can remove the unwanted audio as you expect to recover your valuable disk space, reduce the management costs and avoid the unnecessary confusion.

    It works very fast because of our high-speed audio comparison algorithm is built-in. And the result (duplicate audio) is 100% accurate due to it compares audio relied on audio content, not audio name, last modified date or file size.

    Also, it is very easy to use, only need to select the resources, type(s), and then click the "Find Now!" button to get your want. Even, you can simply click this button directly by using the suggested search conditions.

    Once the finding is done, you will see the result (the duplicate audio list) instantly. It sorts the result by size in descending, and marks the adjacent duplicate audio groups by different colors, in order to let you operate the duplicate audio conveniently. You can also do some common actions for the checked duplicate audio / highlighted audio in the result listing, such as Save, Load, Move to Recycle Bin, Delete, Open/Run, Open File Location, Uncheck All, Invert Checks and Show Properties.

    Sure, you can use some options (e.g. whether scan the system / hidden files and exclude the system / special folders or not) to affect the final result.

    翻译
    介绍Duplicate MP3 Finder Plus -快速找到驱动器上依赖于其内容的重复音频,您可以删除不需要的音频,因为您希望恢复您宝贵的磁盘空间,降低管理成本,避免不必要的混乱。
    它的工作速度非常快,因为我们的高速音频比较算法是内置的。并且结果(重复音频)是100%准确,因为它比较音频依赖音频内容,而不是音频名称,最后修改日期或文件大小。
    此外,它是非常容易使用,只需要选择资源,类型,然后单击“立即查找!按钮来得到你想要的。即使,您也可以直接使用建议的搜索条件直接点击此按钮。
    一旦发现完成,您将立即看到结果(重复的音频列表)。它按大小降序对结果进行排序,并用不同的颜色标记相邻的重复音频组,以便您方便地操作重复的音频。您还可以对结果列表中检查的重复音频/突出显示的音频执行一些常见操作,例如保存,加载,移动到回收站,删除,打开/运行,打开文件位置,全部取消选中,反转检查和显示属性。
    当然,您可以使用一些选项(例如,扫描系统/隐藏文件,并排除系统/特殊文件夹),以影响最终结果。

    算法关键函数如下:

    [AppleScript] 纯文本查看 复制代码
    
    public static bool VerifyKey(string key, ref string type)
            {
                    int num;
                    bool flag;
                    int num2;
                    try
                    {
                            ProjectData.ClearProjectError();
                            num = 2;
                            string text = key.Trim();
                            string text2 = string.Empty;
                            if (text.Length == 19)
                            {
                                    if (Operators.CompareString(text.Substring(0, 4), "TDMF", false) == 0)
                                    {
                                            if (Operators.CompareString(text.Substring(4, 1), "-", false) == 0)
                                            {
                                                    text2 = SelfService.Letter2Num(text.Substring(5, 2));
                                                    if (Conversions.ToInteger(text2) <= 59 && Conversions.ToInteger(text2) >= 0)
                                                    {
                                                            text2 = SelfService.Letter2Num(text.Substring(7, 2));
                                                            if (Conversions.ToInteger(text2) <= 12 && Conversions.ToInteger(text2) >= 1)
                                                            {
                                                                    if (Operators.CompareString(text.Substring(9, 1), "-", false) == 0)
                                                                    {
                                                                            text2 = SelfService.Letter2Num(text.Substring(10, 2));
                                                                            if (Conversions.ToInteger(text2) <= 31 && Conversions.ToInteger(text2) >= 1)
                                                                            {
                                                                                    text2 = text.Substring(12, 2);
                                                                                    if (General.InStrings(text2, new string[]
                                                                                    {
                                                                                            "SG",
                                                                                            "PS",
                                                                                            "HM",
                                                                                            "TM",
                                                                                            "EP"
                                                                                    }))
                                                                                    {
                                                                                            if (Operators.CompareString(text.Substring(14, 1), "-", false) == 0)
                                                                                            {
                                                                                                    text2 = SelfService.Letter2Num(text.Substring(15, 2));
                                                                                                    if (Conversions.ToInteger(text2) <= 23 && Conversions.ToInteger(text2) >= 0)
                                                                                                    {
                                                                                                            text2 = SelfService.Letter2Num(text.Substring(17, 2));
                                                                                                            if (Conversions.ToInteger(text2) <= 59 && Conversions.ToInteger(text2) >= 0)
                                                                                                            {
                                                                                                                    type = text.Substring(12, 2);
                                                                                                                    flag = true;
                                                                                                                    goto IL_1E3;
                                                                                                            }
                                                                                                    }
                                                                                            }
                                                                                    }
                                                                            }
                                                                    }
                                                            }
                                                    }
                                            }
                                    }
                            }
                            IL_19A:
                            flag = false;
                            goto IL_1E3;
                            num2 = -1;
                            @switch(ICSharpCode.Decompiler.ILAst.ILLabel[], num);
                            IL_1B4:
                            goto IL_1D8;
                    }
                    object arg_1B6_0;
                    endfilter(arg_1B6_0 is Exception & num != 0 & num2 == 0);
                    IL_1D8:
                    throw ProjectData.CreateProjectError(-2146828237);
                    IL_1E3:
                    bool arg_1ED_0 = flag;
                    if (num2 != 0)
                    {
                            ProjectData.ClearProjectError();
                    }
                    return arg_1ED_0;
            }
    
    ///////////////////==========================
    private static string Letter2Num(string letters)
            {
                    int num2;
                    string text2;
                    int num3;
                    try
                    {
                            IL_00:
                            int num = 1;
                            if (LikeOperator.LikeString(Declarer.startPath, "*Debug", CompareMethod.Binary))
                            {
                                    goto IL_1E;
                            }
                            IL_15:
                            ProjectData.ClearProjectError();
                            num2 = -2;
                            IL_1E:
                            num = 4;
                            string text = string.Empty;
                            IL_27:
                            num = 5;
                            char[] array = letters.ToCharArray();
                            IL_31:
                            num = 6;
                            char[] array2 = array;
                            int i = 0;
                            checked
                            {
                                    while (i < array2.Length)
                                    {
                                            char c = array2[i];
                                            IL_45:
                                            num = 7;
                                            switch (c)
                                            {
                                            case 'A':
                                                    IL_C7:
                                                    num = 14;
                                                    text += "9";
                                                    IL_D7:
                                                    break;
                                            case 'B':
                                            case 'E':
                                            case 'F':
                                            case 'H':
                                            case 'I':
                                            case 'K':
                                            case 'L':
                                            case 'O':
                                            case 'P':
                                            case 'R':
                                            case 'T':
                                            case 'U':
                                            case 'V':
                                                    goto IL_16F;
                                            case 'C':
                                                    IL_139:
                                                    num = 32;
                                                    text += "7";
                                                    IL_149:
                                                    break;
                                            case 'D':
                                                    IL_103:
                                                    num = 23;
                                                    text += "3";
                                                    IL_113:
                                                    break;
                                            case 'G':
                                                    IL_15D:
                                                    num = 38;
                                                    text += "0";
                                                    IL_16D:
                                                    break;
                                            case 'J':
                                                    IL_14B:
                                                    num = 35;
                                                    text += "6";
                                                    IL_15B:
                                                    break;
                                            case 'M':
                                                    IL_115:
                                                    num = 26;
                                                    text += "4";
                                                    IL_125:
                                                    break;
                                            case 'N':
                                                    IL_DC:
                                                    num = 17;
                                                    text += "8";
                                                    IL_EC:
                                                    break;
                                            case 'Q':
                                                    IL_127:
                                                    num = 29;
                                                    text += "5";
                                                    IL_137:
                                                    break;
                                            case 'S':
                                                    IL_F1:
                                                    num = 20;
                                                    text += "2";
                                                    IL_101:
                                                    break;
                                            case 'W':
                                                    IL_B2:
                                                    num = 11;
                                                    text += "1";
                                                    IL_C2:
                                                    break;
                                            default:
                                                    goto IL_16F;
                                            }
                                            IL_17F:
                                            i++;
                                            IL_185:
                                            num = 43;
                                            continue;
                                            IL_16F:
                                            num = 41;
                                            text += "ERROR!";
                                            goto IL_17F;
                                    }
                                    IL_194:
                                    num = 44;
                                    text2 = text;
                                    IL_19F:
                                    goto IL_2B5;
                                    IL_1A4:;
                            }
                            int arg_1AB_0 = num3 + 1;
                            num3 = 0;
                            @switch(ICSharpCode.Decompiler.ILAst.ILLabel[], arg_1AB_0);
                            IL_268:
                            goto IL_2AA;
                            num3 = num;
                            @switch(ICSharpCode.Decompiler.ILAst.ILLabel[], (num2 > -2) ? num2 : 1);
                            IL_286:
                            goto IL_2AA;
                    }
                    object arg_288_0;
                    endfilter(arg_288_0 is Exception & num2 != 0 & num3 == 0);
                    IL_2AA:
                    throw ProjectData.CreateProjectError(-2146828237);
                    IL_2B5:
                    string arg_2BF_0 = text2;
                    if (num3 != 0)
                    {
                            ProjectData.ClearProjectError();
                    }
                    return arg_2BF_0;
            }
    
    
    


    算法总结
    游客,如果您要查看本帖隐藏内容请回复


    单机版 1.jpg
    游客,如果您要查看本帖隐藏内容请回复

    个人版
    3.jpg
    游客,如果您要查看本帖隐藏内容请回复

    家庭版
    10.jpg
    游客,如果您要查看本帖隐藏内容请回复

    团队版

    100.jpg
    游客,如果您要查看本帖隐藏内容请回复

    企业版
    666.jpg
    游客,如果您要查看本帖隐藏内容请回复


    游客,如果您要查看本帖隐藏内容请回复




    评分

    参与人数 2威望 +8 飘云币 +4 收起 理由
    非诚勿扰 + 4 + 4 很给力!
    orz + 4 很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    昨天 00:29
  • 签到天数: 1656 天

    [LV.Master]伴坛终老

    发表于 2016-11-2 10:43:59 | 显示全部楼层
    超版沙发 多谢分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2024-3-10 19:49
  • 签到天数: 473 天

    [LV.9]以坛为家II

    发表于 2016-11-2 11:40:46 | 显示全部楼层
    又是一家,是Mark家的吗
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-9 08:20
  • 签到天数: 869 天

    [LV.10]以坛为家III

    发表于 2016-11-2 12:17:28 | 显示全部楼层
    .NET的,支持表哥
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-11-27 16:47
  • 签到天数: 114 天

    [LV.6]常住居民II

    发表于 2016-11-2 13:26:24 | 显示全部楼层
    大神啊。。。膜拜一下。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 19:01
  • 签到天数: 1669 天

    [LV.Master]伴坛终老

    发表于 2016-11-2 15:13:13 | 显示全部楼层
    楼主霸气,谢谢分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-4-26 14:16
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2016-11-2 17:26:20 | 显示全部楼层
    感谢分享,支持一下。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 15:05
  • 签到天数: 790 天

    [LV.10]以坛为家III

    发表于 2016-11-2 18:53:23 | 显示全部楼层
    这个好,楼主厉害。谢谢分享!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表