using System; using System.Collections.Generic; using System.IO; #if NET452_OR_GREATER || NETCOREAPP using System.IO.Compression; using System.Linq; #endif using System.Text.RegularExpressions; namespace MPF.Processors { /// /// Represents a single output file with a Regex-matched name /// internal class RegexOutputFile : OutputFile { /// /// Create an OutputFile with a single filename /// public RegexOutputFile(string filename, OutputFileFlags flags) : base([filename], flags) { } /// /// Create an OutputFile with a single filename /// public RegexOutputFile(string filename, OutputFileFlags flags, string artifactKey) : base([filename], flags, artifactKey) { } /// /// Create an OutputFile with set of filenames /// public RegexOutputFile(string[] filenames, OutputFileFlags flags) : base(filenames, flags) { } /// /// Create an OutputFile with set of filenames /// public RegexOutputFile(string[] filenames, OutputFileFlags flags, string artifactKey) : base(filenames, flags, artifactKey) { } /// public override bool Exists(string outputDirectory) { // Ensure the directory exists if (!Directory.Exists(outputDirectory)) return false; // Get list of all files in directory var directoryFiles = Directory.GetFiles(outputDirectory); foreach (string file in directoryFiles) { if (Array.FindIndex(Filenames, pattern => Regex.IsMatch(file, pattern)) > -1) return true; } return false; } #if NET452_OR_GREATER || NETCOREAPP /// public override bool Exists(ZipArchive? archive) { // If the archive is invalid if (archive == null) return false; // Get list of all files in archive var archiveFiles = archive.Entries.Select(e => e.Name).ToList(); foreach (string file in archiveFiles) { if (Array.Exists(Filenames, pattern => Regex.IsMatch(file, pattern))) return true; } return false; } #endif /// public override List GetPaths(string outputDirectory) { // Ensure the directory exists if (!Directory.Exists(outputDirectory)) return []; List paths = []; // Get list of all files in directory var directoryFiles = Directory.GetFiles(outputDirectory); foreach (string file in directoryFiles) { var matches = Array.FindAll(Filenames, pattern => Regex.IsMatch(file, pattern)); if (matches != null && matches.Length > 0) paths.Add(file); } return paths; } } }