void filterCopyStream(Stream input, Stream outStream) { using (StreamWriter streamWriter = new StreamWriter(outStream, System.Text.Encoding.UTF8)) { using (StreamReader streamReader = new StreamReader(input)) { string line; Regex rx = new Regex("^(?<time>[^;]+);(?<source>[^;]+);(?<level>[^;]+)"); var allFilterOptions = Enum.GetValues(typeof(FilterOptionsType)); while ((line = streamReader.ReadLine()) != null) { Match m = rx.Match(line); bool skip = false; if (m.Success) { foreach (FilterOptionsType filterOption in allFilterOptions) { if (!FilterOptions.HasFlag(filterOption)) { string searchString = logFilterOptionsLUT[filterOption]; if (m.Groups["level"].Value.Trim() == searchString) { skip = true; break; } } } } if (!skip) { streamWriter.WriteLine(line); } } } } }