我正在尝试制作 ac# 程序,它将为我比较两个文件,并告诉我特定部分的差异。我已经能够在循环时将我需要的部分放入变量中,但我现在想将这些添加到每个文件具有 3 个值的键中,因此我将在稍后将它们与彼此进行比较的总共有 6 个值的键。但是我只能使用我拥有的循环一次添加 3 个值,所以我需要能够将最后 3 个值添加到键中而不会覆盖前 3 个。
文件中的数据示例:
[\Advanced\Rules\Correlation Rules\Suspect_portscan\];
CheckDescription =S Detect Port scans;
Enabled =B 0;
Priority =L 3;
我已经设法将我需要的东西放入变量中,所以我有:字符串 SigName 将是“Suspect_portscan”Int Enabled、Priority、Blocking as 0 3 和 null 分别。
然后我想做一个字典类型的东西,键是 SigName,前 3 个值是启用、优先级、阻塞。然后在循环第二个文件时,我想在最后 3 个值槽中为相同的 SigName(所以到键)添加第二个文件设置为启用、优先级、阻塞。
然后,我会将其与自身进行比较,例如“if signame(0) != signame(3)”,因此如果启用的文件 1 与启用的文件 2 不同,请记下并告诉我。
但是我遇到的问题是无法将数据放入字典或查找中,我完全被难住了。似乎我应该使用带有值列表的字典,但我无法让它在第二个循环中工作。
谢谢。
代码:
static void Main()
{
Dictionary<string, List<int>> PolicyDictionary = new Dictionary<string, List<int>>();
int Counter = 0, TempCounter = 0;
String[] PolicyOne = System.IO.File.ReadAllLines(@"filepath");
string[] PolicyTwo = System.IO.File.ReadAllLines(@"filepath2");
foreach (string lines in PolicyOne)
{
if ((lines.Contains("CheckDescription")) && (!lines.Contains("userdefined network event template")))
{//if true do this
TempCounter = Counter;
int FirstSlashes = (PolicyOne[(TempCounter - 1)]).IndexOf(@"\", 28);
int LastSlashes = (PolicyOne[(TempCounter - 1)]).LastIndexOf(@"\");
string SigName = (PolicyOne[(TempCounter - 1)]).Substring(FirstSlashes+1,(LastSlashes-FirstSlashes)-1);
Char Enabled = (PolicyOne[(TempCounter + 1)])[(PolicyOne[(TempCounter + 1)]).Length - 2];
Char Priority = (PolicyOne[(TempCounter + 2)])[(PolicyOne[(TempCounter + 2)]).Length - 2];
Char Blocking = (PolicyOne[(TempCounter + 3)])[(PolicyOne[(TempCounter + 3)]).Length-2];
PolicyDictionary[SigName] = new List<int> {Enabled,Priority,Blocking};
}
// end if
Counter++;
}
// end for each
foreach (string lines in PolicyTwo)
{
if ((lines.Contains("CheckDescription")) && (!lines.Contains("userdefined network event template")))
{//if true do this
Counter = 0;
TempCounter = Counter;
int FirstSlashes = (PolicyTwo[(TempCounter - 1)]).IndexOf(@"\", 28);
int LastSlashes = (PolicyTwo[(TempCounter - 1)]).LastIndexOf(@"\");
string SigName = (PolicyTwo[(TempCounter - 1)]).Substring(FirstSlashes + 1, (LastSlashes - FirstSlashes) - 1);
Char Enabled = (PolicyTwo[(TempCounter + 1)])[(PolicyOne[(TempCounter + 1)]).Length - 2];
Char Priority = (PolicyTwo[(TempCounter + 2)])[(PolicyOne[(TempCounter + 2)]).Length - 2];
Char Blocking = (PolicyTwo[(TempCounter + 3)])[(PolicyOne[(TempCounter + 3)]).Length - 2];
// here I will just end up overwriting it, but im not sure how to get arround this.
PolicyDictionary[SigName] = new List<int> { Enabled, Priority, Blocking };
}
// end if
Counter++;
}
// end for each
Console.ReadKey();