diff --git a/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs b/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs index 7989e990..b8eb9d6b 100644 --- a/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs +++ b/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs @@ -92,11 +92,7 @@ namespace SabreTools.Helper.Dats // Now find all folders that are empty, if we are supposed to if (!Romba && addBlanks) { - List empties = Directory - .EnumerateDirectories(basePath, "*", SearchOption.AllDirectories) - .Where(dir => Directory.EnumerateFileSystemEntries(dir, "*", SearchOption.AllDirectories).Count() == 0) - .ToList(); - + List empties = FileTools.GetEmptyDirectories(basePath).ToList(); Parallel.ForEach(empties, Globals.ParallelOptions, dir => @@ -278,11 +274,7 @@ namespace SabreTools.Helper.Dats if (addBlanks) { // Get the list of empty directories - List empties = Directory - .EnumerateDirectories(tempSubDir, "*", SearchOption.AllDirectories) - .Where(dir => Directory.EnumerateFileSystemEntries(dir, "*", SearchOption.AllDirectories).Count() == 0) - .ToList(); - + List empties = FileTools.GetEmptyDirectories(tempSubDir).ToList(); Parallel.ForEach(empties, Globals.ParallelOptions, dir => diff --git a/SabreTools.Helper/Tools/FileTools.cs b/SabreTools.Helper/Tools/FileTools.cs index cfecee89..f60df0e6 100644 --- a/SabreTools.Helper/Tools/FileTools.cs +++ b/SabreTools.Helper/Tools/FileTools.cs @@ -35,31 +35,6 @@ namespace SabreTools.Helper.Tools { #region File Information - /// - /// Retrieve a list of files from a directory recursively in proper order - /// - /// Directory to parse - /// List representing existing files - /// List with all new files - public static List RetrieveFiles(string directory, List infiles) - { - // Take care of the files in the top directory - List toadd = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly).ToList(); - toadd.Sort(new NaturalComparer()); - infiles.AddRange(toadd); - - // Then recurse through and add from the directories - List dirs = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly).ToList(); - dirs = Style.OrderByAlphaNumeric(dirs, s => s).ToList(); - foreach (string dir in dirs) - { - infiles = RetrieveFiles(dir, infiles); - } - - // Return the new list - return infiles; - } - /// /// Get what type of DAT the input file is /// @@ -193,6 +168,30 @@ namespace SabreTools.Helper.Tools } } + /// + /// Get all empty folders within a root folder + /// + /// Root directory to parse + /// IEumerable containing all directories that are empty, an empty enumerable if the root is empty, null otherwise + public static IEnumerable GetEmptyDirectories(string root) + { + // Check if the root exists first + if (!Directory.Exists(root)) + { + return null; + } + + // If it does and it is empty, return a blank enumerable + if (Directory.EnumerateFileSystemEntries(root, "*", SearchOption.AllDirectories).Count() == 0) + { + return new List(); + } + + // Otherwise, get the complete list + return Directory.EnumerateDirectories(root, "*", SearchOption.AllDirectories) + .Where(dir => Directory.EnumerateFileSystemEntries(dir, "*", SearchOption.AllDirectories).Count() == 0); + } + /// /// Retrieve file information for a single file /// @@ -250,6 +249,31 @@ namespace SabreTools.Helper.Tools return rom; } + /// + /// Retrieve a list of files from a directory recursively in proper order + /// + /// Directory to parse + /// List representing existing files + /// List with all new files + public static List RetrieveFiles(string directory, List infiles) + { + // Take care of the files in the top directory + List toadd = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly).ToList(); + toadd.Sort(new NaturalComparer()); + infiles.AddRange(toadd); + + // Then recurse through and add from the directories + List dirs = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly).ToList(); + dirs = Style.OrderByAlphaNumeric(dirs, s => s).ToList(); + foreach (string dir in dirs) + { + infiles = RetrieveFiles(dir, infiles); + } + + // Return the new list + return infiles; + } + #endregion #region File Manipulation