示例#1
0
        /// <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;
 }