diff --git a/SabreTools.Library/Help/Feature.cs b/SabreTools.Library/Help/Feature.cs index 338605f0..c1d71b97 100644 --- a/SabreTools.Library/Help/Feature.cs +++ b/SabreTools.Library/Help/Feature.cs @@ -519,6 +519,10 @@ namespace SabreTools.Library.Help if (!valid) valid = File.Exists(input) || Directory.Exists(input); + // If we're not valid at this point, we weant to check if the flag is a wildcarded input + if (!valid) + valid = input.Contains("*") || input.Contains("?"); + return valid; } diff --git a/SabreTools.Library/Help/TopLevel.cs b/SabreTools.Library/Help/TopLevel.cs index e531162e..79ef8307 100644 --- a/SabreTools.Library/Help/TopLevel.cs +++ b/SabreTools.Library/Help/TopLevel.cs @@ -1,14 +1,8 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using SabreTools.Library.Data; -using SabreTools.Library.DatFiles; -using SabreTools.Library.Help; -using SabreTools.Library.Tools; namespace SabreTools.Library.Help { @@ -38,6 +32,10 @@ namespace SabreTools.Library.Help // Special precautions for files and directories if (File.Exists(args[i]) || Directory.Exists(args[i])) Inputs.Add(args[i]); + + // Special precautions for wildcarded inputs (potential paths) + if (args[i].Contains("*") || args[i].Contains("?")) + Inputs.Add(args[i]); } return true; diff --git a/SabreTools.Library/IO/DirectoryExtensions.cs b/SabreTools.Library/IO/DirectoryExtensions.cs index 6b52f8ac..8e6f2c45 100644 --- a/SabreTools.Library/IO/DirectoryExtensions.cs +++ b/SabreTools.Library/IO/DirectoryExtensions.cs @@ -67,14 +67,24 @@ namespace SabreTools.Library.IO public static List GetDirectoriesOnly(List inputs, bool appendparent = false) { List outputs = new List(); - foreach (string input in inputs) + for (int i = 0; i < inputs.Count; i++) { + string input = inputs[i]; + + // If we have a wildcard + string pattern = "*"; + if (input.Contains("*") || input.Contains("?")) + { + pattern = Path.GetFileName(input); + input = input.Substring(0, input.Length - pattern.Length); + } + if (Directory.Exists(input)) { // Get the parent path in case of appending string parentPath = Path.GetFullPath(input); - List directories = GetDirectoriesOrdered(input); + List directories = GetDirectoriesOrdered(input, pattern); foreach (string dir in directories) { try @@ -100,10 +110,11 @@ namespace SabreTools.Library.IO /// Retrieve a list of directories from a directory recursively in proper order /// /// Directory to parse + /// Optional pattern to search for directory names /// List with all new files - private static List GetDirectoriesOrdered(string dir) + private static List GetDirectoriesOrdered(string dir, string pattern = "*") { - return GetDirectoriesOrderedHelper(dir, new List()); + return GetDirectoriesOrderedHelper(dir, new List(), pattern); } /// @@ -111,18 +122,19 @@ namespace SabreTools.Library.IO /// /// Directory to parse /// List representing existing files + /// Optional pattern to search for directory names /// List with all new files - private static List GetDirectoriesOrderedHelper(string dir, List infiles) + private static List GetDirectoriesOrderedHelper(string dir, List infiles, string pattern) { // Take care of the files in the top directory - List toadd = Directory.EnumerateDirectories(dir, "*", SearchOption.TopDirectoryOnly).ToList(); + List toadd = Directory.EnumerateDirectories(dir, pattern, SearchOption.TopDirectoryOnly).ToList(); toadd.Sort(new NaturalComparer()); infiles.AddRange(toadd); // Then recurse through and add from the directories foreach (string subDir in toadd) { - infiles = GetDirectoriesOrderedHelper(subDir, infiles); + infiles = GetDirectoriesOrderedHelper(subDir, infiles, pattern); } // Return the new list @@ -138,14 +150,24 @@ namespace SabreTools.Library.IO public static List GetFilesOnly(List inputs, bool appendparent = false) { List outputs = new List(); - foreach (string input in inputs) + for (int i = 0; i < inputs.Count; i++) { + string input = inputs[i]; + + // If we have a wildcard + string pattern = "*"; + if (input.Contains("*") || input.Contains("?")) + { + pattern = Path.GetFileName(input); + input = input.Substring(0, input.Length - pattern.Length); + } + // Get the parent path in case of appending string parentPath = Path.GetFullPath(input); if (Directory.Exists(input)) { - List files = GetFilesOrdered(input); + List files = GetFilesOrdered(input, pattern); foreach (string file in files) { try @@ -186,11 +208,11 @@ namespace SabreTools.Library.IO /// Retrieve a list of files from a directory recursively in proper order /// /// Directory to parse - /// List representing existing files + /// Optional pattern to search for directory names /// List with all new files - public static List GetFilesOrdered(string dir) + public static List GetFilesOrdered(string dir, string pattern = "*") { - return GetFilesOrderedHelper(dir, new List()); + return GetFilesOrderedHelper(dir, new List(), pattern); } /// @@ -198,20 +220,21 @@ namespace SabreTools.Library.IO /// /// Directory to parse /// List representing existing files + /// Optional pattern to search for directory names /// List with all new files - private static List GetFilesOrderedHelper(string dir, List infiles) + private static List GetFilesOrderedHelper(string dir, List infiles, string pattern) { // Take care of the files in the top directory - List toadd = Directory.EnumerateFiles(dir, "*", SearchOption.TopDirectoryOnly).ToList(); + List toadd = Directory.EnumerateFiles(dir, pattern, SearchOption.TopDirectoryOnly).ToList(); toadd.Sort(new NaturalComparer()); infiles.AddRange(toadd); // Then recurse through and add from the directories - List subDirs = Directory.EnumerateDirectories(dir, "*", SearchOption.TopDirectoryOnly).ToList(); + List subDirs = Directory.EnumerateDirectories(dir, pattern, SearchOption.TopDirectoryOnly).ToList(); subDirs.Sort(new NaturalComparer()); foreach (string subdir in subDirs) { - infiles = GetFilesOrderedHelper(subdir, infiles); + infiles = GetFilesOrderedHelper(subdir, infiles, pattern); } // Return the new list diff --git a/SabreTools.Library/IO/PathExtensions.cs b/SabreTools.Library/IO/PathExtensions.cs index e65cf8f0..8d31a26c 100644 --- a/SabreTools.Library/IO/PathExtensions.cs +++ b/SabreTools.Library/IO/PathExtensions.cs @@ -55,7 +55,7 @@ namespace SabreTools.Library.IO public static bool HasValidArchiveExtension(string path) { // Get the extension from the path, if possible - string ext = PathExtensions.GetNormalizedExtension(path); + string ext = GetNormalizedExtension(path); // Check against the list of known archive extensions switch (ext)