/// <summary> /// Получить и сохранить в ступенчатый массив файлы для проверки /// </summary> /// <param name="path">Путь к каталогу для проверки</param> /// <param name="searchPattern">Паттерн для поиска</param> public void ScanFiles(string path, string searchPattern) { ClearVirusList(); List <string> ListWithPath = FindFilesPath(path, searchPattern).ToList();//.Where(x=>!ExceptionFiles.Select(y=>y.Path).Contains(x)).ToList(); int listLength = ListWithPath.Count; //string[][] stringArraySplite = new string[countThread][]; //for (int i = 0; i < stringArraySplite.Length - 1; i++) //{ // stringArraySplite[i] = ListWithPath.GetRange(0, Convert.ToInt32(Convert.ToString(listLength / stringArraySplite.Length))).ToArray(); // ListWithPath.RemoveRange(0, int.Parse(Convert.ToString(listLength / stringArraySplite.Length))); //} //stringArraySplite[stringArraySplite.Length - 1] = ListWithPath.GetRange(0, ListWithPath.Count).ToArray(); //ListWithPath = null; //Counter = new CounterWorker((double)listLength); Counter.SetMaxValue((double)listLength, Enams.ResetStatus.Reset); SignaturesArray = new FileWithSignature[CountThread][]; for (int i = 0; i < SignaturesArray.Length - 1; i++) { SignaturesArray[i] = ListWithPath.GetRange(0, listLength / SignaturesArray.Length).Select(x => new VirusFile(x)).ToArray(); ListWithPath.RemoveRange(0, SignaturesArray[i].Length); //SignaturesArray[i] = new FileWithSignature[listLength / SignaturesArray.Length]; //for (int j = 0; j < SignaturesArray[i].Length; j++) //{ // SignaturesArray[i][j] = new VirusFile(ListWithPath[j]); //} //ListWithPath.RemoveRange(0, SignaturesArray[i].Length); } SignaturesArray[SignaturesArray.Length - 1] = ListWithPath.GetRange(0, ListWithPath.Count).Select(x => new VirusFile(x)).ToArray(); SignaturesArray = SignaturesArray.Select(x => x.Where(y => y.Signature != null).ToArray()).Where(z => z.Length != 0).ToArray(); Workers = new VirusWorker[SignaturesArray.Length]; for (int i = 0; i < SignaturesArray.Length; i++) { Workers[i] = new VirusWorker(SignatureString, EvrizmM, SignatureM, AutoDeleteVirus, SignaturesArray[i]); Workers[i].FindDangerEvent += AddInDangerFile; Workers[i].FileCheckedEvent += Counter.ChengeElement; Workers[i].Start(); } }
public FindDangerEventArgs(FileWithSignature dangerFile) { DangerFile = dangerFile; }