protected FileInfo[] GatherInputFiles() { var cfg = Current; var parser = cfg.Parser; InvokeReportProgress("Gathering input files..."); if (!string.IsNullOrEmpty(cfg.InputFile)) { var inputFileInfo = new FileInfo(cfg.InputFile); if (!string.IsNullOrEmpty(cfg.InputFolder)) { // TODO: at level WARN! InvokeReportProgress("Both input file and input folder are set, disregarding the latter."); } else { cfg.InputFolder = inputFileInfo.Directory.FullName; } if (!cfg.OverwriteFiles && FileProcessor.HasBeenProcessed(inputFileInfo, cfg.InputFolder, cfg.OutputFolder)) { return(Array.Empty <FileInfo>()); } return(new[] { inputFileInfo }); } IEnumerable <FileInfo> inputFiles; if (!string.IsNullOrEmpty(cfg.FilePrefix)) { InvokeReportProgress($"Gathering previously parsed files with the prefix '{cfg.FilePrefix}'."); // if we are reparsing, gather the files with the Reparse prefix only inputFiles = FileProcessor.GetPrefixedLogsFromDirectory(cfg.InputFolder, cfg.FilePrefix) .Select(x => new FileInfo(x)) .OrderByDescending(x => x.LastWriteTime); } else { InvokeReportProgress("Gathering all log files from input directory."); // if we're not, gather ALL log files from the directory inputFiles = FileProcessor.GetLogsFromDirectory(cfg.InputFolder) .Select(x => new FileInfo(x)) .OrderByDescending(x => x.LastWriteTime); } if (cfg.BeginDateTime.HasValue || cfg.EndDateTime.HasValue) { InvokeReportProgress($"Pre-filtering by file name based on the begin ({cfg.BeginDateTime}) and end ({cfg.EndDateTime}) configuration values."); // apply pre-filtering of files if there is a value in any of those two filters inputFiles = FileProcessor.FilterFilesByDateFilter(inputFiles, parser.DateFileNameFormat, cfg.BeginDateTime, cfg.EndDateTime, cfg.FilePrefix); } if (cfg.TakeLastFiles.HasValue) { InvokeReportProgress($"Taking last {cfg.TakeLastFiles.Value} files."); // take only so many entries, if this value is specified inputFiles = inputFiles.Take(cfg.TakeLastFiles.Value); } InvokeReportProgress($"Overwriting of files is '{cfg.OverwriteFiles}'."); if (!cfg.OverwriteFiles) { inputFiles = inputFiles.Where(x => !FileProcessor.HasBeenProcessed(x, cfg.InputFolder, cfg.OutputFolder, cfg.FilePrefix)); } var inputFilesArray = inputFiles.ToArray(); InvokeReportProgress($"Pre-filtering resolved {inputFilesArray.Length} file(s) ready for processing."); return(inputFilesArray); }