private static bool FileContainsBytes(FileSystemInfo info)
        {
            // определяем кодировку файла
            byte[] oldContainingBytes;
            var    oldEncoding = _searchParams.Encoding;

            try
            {
                _searchParams.Encoding = TextFileEncodingHelper.DetectTextFileEncoding(info.FullName) ?? oldEncoding;
                _containingBytes       = _searchParams.Encoding.GetBytes(_searchParams.ContainingText);
                oldContainingBytes     = _containingBytes;
            }
            catch (Exception)
            {
                oldContainingBytes = _containingBytes;
            }

            var matches = false;

            if (info is FileInfo)
            {
                matches = FileContainsBytes(info.FullName, oldContainingBytes);
            }
            _searchParams.Encoding = oldEncoding;

            return(matches);
        }
        private static bool MatchesRestrictions(FileSystemInfo info)
        {
            var matches = false;

            //ToDo: здесь добавить поиски по различным расширениям файлов (и для незапороленных архивов распаковать сначала, потом все файлы проверять)
            if (_searchParams.ContainingChecked)
            {
                switch (new FileInfo(info.FullName).Extension.ToLower())
                {
                case ".txt":
                case ".ini":
                case ".json":
                case ".csv":
                case ".yaml":
                    try
                    {
                        var encoding = TextFileEncodingHelper.DetectTextFileEncoding(info.FullName) ?? _searchParams.Encoding;
                        using (var sr = new StreamReader(info.FullName, encoding))
                            matches = sr.ReadToEnd().IndexOf(_searchParams.ContainingText, StringComparison.OrdinalIgnoreCase) >= 0;
                    }
                    catch (Exception)
                    {
                        matches = false;
                    }
                    break;

                case ".rtf":
                    using (var rtBox = new System.Windows.Forms.RichTextBox())
                    {
                        rtBox.Rtf = File.ReadAllText(info.FullName);
                        matches   = rtBox.Text.Replace("\r\n", ",").IndexOf(_searchParams.ContainingText, StringComparison.OrdinalIgnoreCase) >= 0;
                    }
                    break;

                case ".pdf":
                    matches = FullTextSearchHelper.FindTextInPdfFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".doc":
                    matches = FullTextSearchHelper.FindTextInDocFile(info.FullName, _searchParams.ContainingText);
                    break;

                case ".docx":
                case ".html":
                case ".dot":
                case ".dotx":
                case ".dotm":
                case ".odt":
                case ".ott":
                case ".docm":
                    matches = FullTextSearchHelper.FindTextInDocumentFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".xls":
                case ".xlsx":
                    matches = FullTextSearchHelper.FindTextInExcellFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".pptx":
                case ".ppt":
                case ".pot":
                case ".pps":
                case ".potx":
                case ".ppsx":
                case ".odp":
                case ".ppsm":
                case ".pptm":
                    matches = FullTextSearchHelper.FindTextInPresentationFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".one":
                case ".onetoc2":
                    matches = FullTextSearchHelper.FindTextInOneNoteFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".epub":
                    matches = FullTextSearchHelper.FindTextInEpubFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".fb2":
                    matches = FullTextSearchHelper.FindTextInFb2File(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".vsdx":
                case ".xps":
                    matches = FullTextSearchHelper.FindTextInPackageFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".png":
                case ".bmp":
                case ".gif":
                case ".jpeg":
                case ".tiff":
                case ".tif":
                    if (_searchParams.SearchInImages)
                    {
                        matches = FullTextSearchHelper.FindTextInImageFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    }
                    break;

                case ".zip":
                    if (_searchParams.SearchInZipArchive)
                    {
                        // ToDo: проверять для всех файлов архива
                        // 1. Распаковать файлы архива во временный каталог
                        // 2. Для каждого файла вызывать поиск
                        // 3. Потом удалить временный каталог вместе с файлаами

                        //using (var fPackage = Package.Open(info.FullName, FileMode.Open, FileAccess.Read))
                        //{
                        //    foreach (var fPart in fPackage.GetParts())
                        //    {
                        //        if (_cancellationTokenSource.IsCancellationRequested)
                        //            break;

                        //        using (var fPartStream = fPart.GetStream(FileMode.Open))
                        //        {
                        //            using (var textReader = new StreamReader(fPartStream))
                        //            {
                        //                var fPartText = textReader.ReadToEnd();
                        //                if (fPartText.Contains(_searchParams.ContainingText))
                        //                    matches = true;
                        //            }
                        //        }
                        //    }
                        //}
                    }
                    matches = false;
                    break;

                default:
                    matches = FileContainsBytes(info);
                    break;
                }
            }

            return(matches);
        }