using System; using System.IO; namespace MPF.Processors { /// /// Represents attributes about an /// [Flags] public enum OutputFileFlags : ushort { /// /// Default state /// None = 0x0000, /// /// File is required to exist /// Required = 0x0001, /// /// File is included as an artifact /// Artifact = 0x0002, /// /// File is included as a binary artifact /// Binary = 0x0004, /// /// File can be deleted after processing /// Deleteable = 0x0008, /// /// File can be zipped after processing /// Zippable = 0x0010, } /// /// Represents a single output file /// public class OutputFile { /// /// Set of all filename variants /// public string[] Filenames { get; private set; } /// /// Indicates if the file is required /// public bool IsRequired { get { #if NET20 || NET35 return (_flags & OutputFileFlags.Required) != 0; #else return _flags.HasFlag(OutputFileFlags.Required); #endif } } /// /// Indicates if the file is an artifact /// public bool IsArtifact { get { #if NET20 || NET35 return (_flags & OutputFileFlags.Artifact) != 0 || (_flags & OutputFileFlags.Binary) != 0; #else return _flags.HasFlag(OutputFileFlags.Artifact) || _flags.HasFlag(OutputFileFlags.Binary); #endif } } /// /// Indicates if the file is a binary artifact /// public bool IsBinaryArtifact { get { #if NET20 || NET35 return (_flags & OutputFileFlags.Binary) != 0; #else return _flags.HasFlag(OutputFileFlags.Binary); #endif } } /// /// Indicates if the file is deleteable after processing /// public bool IsDeleteable { get { #if NET20 || NET35 return (_flags & OutputFileFlags.Deleteable) != 0; #else return _flags.HasFlag(OutputFileFlags.Deleteable); #endif } } /// /// Indicates if the file is zippable after processing /// public bool IsZippable { get { #if NET20 || NET35 return (_flags & OutputFileFlags.Zippable) != 0; #else return _flags.HasFlag(OutputFileFlags.Zippable); #endif } } /// /// Represents attributes about the current file /// private readonly OutputFileFlags _flags; /// /// Create an OutputFile with a single filename /// public OutputFile(string filename, OutputFileFlags flags) { Filenames = [filename]; _flags = flags; } /// /// Create an OutputFile with set of filenames /// public OutputFile(string[] filenames, OutputFileFlags flags) { Filenames = filenames; _flags = flags; } /// /// Indicates if an output file exists in a base directory /// /// Base directory to check in public bool Exists(string baseDirectory) { foreach (string filename in Filenames) { // Check for invalid filenames if (string.IsNullOrEmpty(filename)) continue; try { string possiblePath = Path.Combine(baseDirectory, filename); if (File.Exists(possiblePath)) return true; } catch { } } return false; } } }