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); }