public override MatchResult Matches(FileInfo file, Dictionary <Type, IFileCache> fileCaches, CancellationToken token) { Encoding detectedEncoding = TextUtil.DetectEncoding(file); if (!m_Parameters.MatchOnlyWithinSingleLine) { string text = File.ReadAllText(file.FullName, detectedEncoding); if (m_Regex.IsMatch(text)) { return(new MatchResult(MatchResultType.Yes, new string[] { "Yes" })); } } else { using (StreamReader reader = TextUtil.CreateStreamReaderWithAppropriateEncoding( file, detectedEncoding)) { while (!reader.EndOfStream) { string line = reader.ReadLine(); if (m_Regex.IsMatch(line)) { return(new MatchResult(MatchResultType.Yes, new string[] { "Yes" })); } } } } return(new MatchResult(MatchResultType.No, new string[] { "No" })); }
protected internal override ProcessingResult Process(FileInfo file, string[] values, CancellationToken token) { string outputFilename = ReplaceUtil.Replace(m_Parameters.FileName, file); if (!m_Parameters.OverwriteExistingFile && File.Exists(outputFilename)) { return(new ProcessingResult(ProcessingResultType.Failure, "File exists", new FileInfo[0])); } Encoding encoding = TextUtil.DetectEncoding(file); string tmpFile = Path.GetTempFileName(); bool endsWithNewLine = TextUtil.FileEndsWithNewline(file, encoding); using (StreamWriter writer = TextUtil.CreateStreamWriterWithAppropriateEncoding( tmpFile, encoding, m_Parameters.OutputEncoding)) { writer.NewLine = TextUtil.GetNewline(file, m_Parameters.LineEndings); using (StreamReader reader = TextUtil.CreateStreamReaderWithAppropriateEncoding(file, encoding)) { string text = m_Parameters.Text ?? string.Empty; if (m_Parameters.PrependOrAppend == PrependAppend.Prepend) { WriteLines(writer, text); } bool writtenAnyFromFile = false; while (!reader.EndOfStream) { if (writtenAnyFromFile) { writer.WriteLine(); } writer.Write(reader.ReadLine()); writtenAnyFromFile = true; } // Add a trailing line ending if the original file ended in one if (endsWithNewLine) { writer.WriteLine(); } if (m_Parameters.PrependOrAppend == PrependAppend.Append) { WriteLines(writer, text); } } } return(GetProcessingResultFromCopyAndDeleteTempFile(file, outputFilename, tmpFile, m_Parameters.OverwriteExistingFile, m_Parameters.MoveOriginalToRecycleBin)); }
protected internal override ProcessingResult Process(FileInfo file, string[] values, CancellationToken token) { string outputFilename = ReplaceUtil.Replace(m_Parameters.FileName, file); if (!m_Parameters.OverwriteExistingFile && File.Exists(outputFilename)) { return(new ProcessingResult(ProcessingResultType.Failure, "File exists", new FileInfo[0])); } Encoding encoding = TextUtil.DetectEncoding(file); string tmpFile = Path.GetTempFileName(); bool endsWithNewLine = TextUtil.FileEndsWithNewline(file, encoding); using (StreamWriter writer = TextUtil.CreateStreamWriterWithAppropriateEncoding( tmpFile, encoding, m_Parameters.OutputEncoding)) { writer.NewLine = TextUtil.GetNewline(file, m_Parameters.LineEndings); using (StreamReader reader = TextUtil.CreateStreamReaderWithAppropriateEncoding( file, encoding)) { bool keep = m_Parameters.FilterType == LineFilterType.KeepMatchingLines; bool anyWritten = false; while (!reader.EndOfStream) { string line = reader.ReadLine(); bool matches = m_Regex.IsMatch(line); if (matches == keep) { if (anyWritten) { writer.WriteLine(); } writer.Write(line); anyWritten = true; } } if (endsWithNewLine) { writer.WriteLine(); } } } return(GetProcessingResultFromCopyAndDeleteTempFile(file, outputFilename, tmpFile, m_Parameters.OverwriteExistingFile, m_Parameters.MoveOriginalToRecycleBin)); }
protected internal override ProcessingResult Process(FileInfo file, string[] values, CancellationToken token) { string outputFilename = Util.ReplaceUtil.Replace(m_Parameters.FileName, file); if (!m_Parameters.OverwriteExistingFile && File.Exists(outputFilename)) { return(new ProcessingResult(ProcessingResultType.Failure, "File exists", new FileInfo[0])); } Encoding detectedEncoding = TextUtil.DetectEncoding(file); string tmpFile = Path.GetTempFileName(); using (StreamWriter writer = TextUtil.CreateStreamWriterWithAppropriateEncoding( tmpFile, detectedEncoding, m_Parameters.OutputEncoding)) { writer.NewLine = TextUtil.GetNewline(file, m_Parameters.LineEndings); if (!m_Parameters.MatchOnlyWithinSingleLine) { string text = File.ReadAllText(file.FullName, detectedEncoding); text = m_Regex.Replace(text, m_ReplacementText); writer.Write(text); } else { bool endsWithNewLine = TextUtil.FileEndsWithNewline(file, detectedEncoding); using (StreamReader reader = TextUtil.CreateStreamReaderWithAppropriateEncoding( file, detectedEncoding)) { while (!reader.EndOfStream) { string line = reader.ReadLine(); line = m_Regex.Replace(line, m_ReplacementText); if (!reader.EndOfStream || endsWithNewLine) { writer.WriteLine(line); } else { writer.Write(line); } } } } } return(GetProcessingResultFromCopyAndDeleteTempFile(file, outputFilename, tmpFile, m_Parameters.OverwriteExistingFile, m_Parameters.MoveOriginalToRecycleBin)); }
protected internal override ProcessingResult Process(FileInfo file, string[] values, CancellationToken token) { string outputFilename = Util.ReplaceUtil.Replace(FileName, file); if (!OverwriteExistingFile && File.Exists(outputFilename)) { return(new ProcessingResult(ProcessingResultType.Failure, "File exists", new FileInfo[0])); } Encoding encoding = TextUtil.DetectEncoding(file); string tmpFile = Path.GetTempFileName(); bool endsWithNewLine = TextUtil.FileEndsWithNewline(file, encoding); using (StreamWriter writer = TextUtil.CreateStreamWriterWithAppropriateEncoding( tmpFile, encoding, OutputEncodingType)) { writer.NewLine = TextUtil.GetNewline(file, LineEndings); using (StreamReader reader = TextUtil.CreateStreamReaderWithAppropriateEncoding( file, encoding)) { while (!reader.EndOfStream) { string line = reader.ReadLine(); line = TransformLine(line); if (!reader.EndOfStream || endsWithNewLine) { writer.WriteLine(line); } else { writer.Write(line); } } } } return(GetProcessingResultFromCopyAndDeleteTempFile(file, outputFilename, tmpFile, OverwriteExistingFile, MoveOriginalToRecycleBin)); }