Duplicate MP3 Finder Plus简单算法分析
本帖最后由 yosen2001 于 2016-11-2 10:39 编辑软件名称:Duplicate MP3 Finder Plus
官方网站:http://duplicatefilefinder4pc.com
官方下载:http://duplicatefilefinder4pc.com/duplicate-mp3-finder-plus.htm
Zip压缩包EXE安装包RAR压缩包
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%准确,因为它比较音频依赖音频内容,而不是音频名称,最后修改日期或文件大小。此外,它是非常容易使用,只需要选择资源,类型,然后单击“立即查找!按钮来得到你想要的。即使,您也可以直接使用建议的搜索条件直接点击此按钮。一旦发现完成,您将立即看到结果(重复的音频列表)。它按大小降序对结果进行排序,并用不同的颜色标记相邻的重复音频组,以便您方便地操作重复的音频。您还可以对结果列表中检查的重复音频/突出显示的音频执行一些常见操作,例如保存,加载,移动到回收站,删除,打开/运行,打开文件位置,全部取消选中,反转检查和显示属性。当然,您可以使用一些选项(例如,扫描系统/隐藏文件,并排除系统/特殊文件夹),以影响最终结果。
算法关键函数如下:
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;
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;
}
算法总结
**** Hidden Message *****
单机版
**** Hidden Message *****
个人版
**** Hidden Message *****
家庭版
**** Hidden Message *****
团队版
**** Hidden Message *****
企业版
**** Hidden Message *****
**** Hidden Message *****
超版沙发 多谢分享 一锅端,666 又是一家,是Mark家的吗 表哥牛犇~~ .NET的,支持表哥 大神啊。。。膜拜一下。 楼主霸气,谢谢分享 感谢分享,支持一下。 这个好,楼主厉害。谢谢分享!