コード例 #1
0
        public void Execute()
        {
            var options = Options as SearchOptions;

            try
            {
                Parallel.For(0, Stats.TotalFiles, fileIndex =>
                {
                    {
                        var filename       = Files[fileIndex];
                        var sourceLines    = File.ReadAllLines(filename);
                        string filenameExt = Path.GetExtension(filename).ToLower();
                        Stats.FoundFiles++;
                        var foundInFile = FileFilter.Match(options, filename, filenameExt);
                        for (var lineNo = 0; lineNo < sourceLines.Length; lineNo++)
                        {
                            var line  = sourceLines[lineNo];
                            var lines = LineFilter.Match(options, Files[fileIndex], filenameExt, sourceLines, sourceLines[lineNo] + " ", lineNo);
                            if (lines.Count() > 0 && foundInFile)
                            {
                                foreach (var processedLine in lines)
                                {
                                    foundLines.Add(processedLine);
                                }
                            }
                        }
                    }
                });
            }
            finally
            {
                foundLines.CompleteAdding();
            }

            var result = foundLines.GetConsumingEnumerable().ToList();

            if (result.Any())
            {
                ProcessHtmlOutput(Options as SearchOptions, result);
                ProcessConsoleOutput(Options as SearchOptions, result);
                ProcessFileUpdateRelatedDirectives(Options as SearchOptions, result);
            }
        }