コード例 #1
0
        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);
        }