private Encoding DetectEncoding(byte[] sampleBytes) { if (AlwaysUseEncoding != null) { return(AlwaysUseEncoding); } return(EncodingDetector.Detect(sampleBytes, defaultEncoding: DefaultEncodingIfNotDetected)); }
private FindResultItem FindInFile(string filePath) { var resultItem = new FindResultItem(); resultItem.IsSuccess = true; resultItem.IncludeFilesWithoutMatches = IncludeFilesWithoutMatches; resultItem.FileName = Path.GetFileName(filePath); resultItem.FilePath = filePath; resultItem.FileRelativePath = "." + filePath.Substring(Dir.Length); byte[] sampleBytes; StopWatch.Start("ReadSampleFileContent"); //Check if can read first try { sampleBytes = Utils.ReadFileContentSample(filePath); } catch (Exception exception) { StopWatch.Stop("ReadSampleFileContent"); resultItem.IsSuccess = false; resultItem.FailedToOpen = true; resultItem.ErrorMessage = exception.Message; return(resultItem); } StopWatch.Stop("ReadSampleFileContent"); if (!SkipBinaryFileDetection) { StopWatch.Start("IsBinaryFile"); if (resultItem.IsSuccess) { // check for /0/0/0/0 if (Utils.IsBinaryFile(sampleBytes)) { StopWatch.Stop("IsBinaryFile"); resultItem.IsSuccess = false; resultItem.IsBinaryFile = true; return(resultItem); } } StopWatch.Stop("IsBinaryFile"); } Encoding encoding = EncodingDetector.Detect(sampleBytes, defaultEncoding: Encoding.UTF8); resultItem.FileEncoding = encoding; StopWatch.Start("ReadFullFileContent"); string fileContent; using (var sr = new StreamReader(filePath, encoding)) { fileContent = sr.ReadToEnd(); } StopWatch.Stop("ReadFullFileContent"); StopWatch.Start("FindMatches"); RegexOptions regexOptions = Utils.GetRegExOptions(IsCaseSensitive); resultItem.Matches = Utils.FindMatches(fileContent, FindText, FindTextHasRegEx, regexOptions); StopWatch.Stop("FindMatches"); resultItem.NumMatches = resultItem.Matches.Count; return(resultItem); }