diff --git a/SabreTools.Helper/Objects/Dat/DatFile.cs b/SabreTools.Helper/Objects/Dat/DatFile.cs index c9edacb8..bf46856b 100644 --- a/SabreTools.Helper/Objects/Dat/DatFile.cs +++ b/SabreTools.Helper/Objects/Dat/DatFile.cs @@ -601,8 +601,7 @@ namespace SabreTools.Helper { if (Directory.Exists(input)) { - List files = Directory.EnumerateFiles(input, "*", SearchOption.AllDirectories).ToList(); - files.Sort(new NaturalComparer()); + List files = FileTools.RetrieveFiles(input, new List()); foreach (string file in files) { try diff --git a/SabreTools.Helper/Tools/FileTools.cs b/SabreTools.Helper/Tools/FileTools.cs index 8d5de158..99e99949 100644 --- a/SabreTools.Helper/Tools/FileTools.cs +++ b/SabreTools.Helper/Tools/FileTools.cs @@ -1,6 +1,7 @@ using Mono.Data.Sqlite; using OCRC; using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; @@ -12,6 +13,31 @@ namespace SabreTools.Helper { #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.Sort(new NaturalComparer()); + foreach (string dir in dirs) + { + infiles = RetrieveFiles(dir, infiles); + } + + // Return the new list + return infiles; + } + /// /// Get what type of DAT the input file is ///