[FileTools] Create method for finding empty directories

This commit is contained in:
Matt Nadareski
2017-03-14 20:36:16 -07:00
parent ac14a3a1f4
commit bee4a63933
2 changed files with 51 additions and 35 deletions

View File

@@ -92,11 +92,7 @@ namespace SabreTools.Helper.Dats
// Now find all folders that are empty, if we are supposed to // Now find all folders that are empty, if we are supposed to
if (!Romba && addBlanks) if (!Romba && addBlanks)
{ {
List<string> empties = Directory List<string> empties = FileTools.GetEmptyDirectories(basePath).ToList();
.EnumerateDirectories(basePath, "*", SearchOption.AllDirectories)
.Where(dir => Directory.EnumerateFileSystemEntries(dir, "*", SearchOption.AllDirectories).Count() == 0)
.ToList();
Parallel.ForEach(empties, Parallel.ForEach(empties,
Globals.ParallelOptions, Globals.ParallelOptions,
dir => dir =>
@@ -278,11 +274,7 @@ namespace SabreTools.Helper.Dats
if (addBlanks) if (addBlanks)
{ {
// Get the list of empty directories // Get the list of empty directories
List<string> empties = Directory List<string> empties = FileTools.GetEmptyDirectories(tempSubDir).ToList();
.EnumerateDirectories(tempSubDir, "*", SearchOption.AllDirectories)
.Where(dir => Directory.EnumerateFileSystemEntries(dir, "*", SearchOption.AllDirectories).Count() == 0)
.ToList();
Parallel.ForEach(empties, Parallel.ForEach(empties,
Globals.ParallelOptions, Globals.ParallelOptions,
dir => dir =>

View File

@@ -35,31 +35,6 @@ namespace SabreTools.Helper.Tools
{ {
#region File Information #region File Information
/// <summary>
/// Retrieve a list of files from a directory recursively in proper order
/// </summary>
/// <param name="directory">Directory to parse</param>
/// <param name="infiles">List representing existing files</param>
/// <returns>List with all new files</returns>
public static List<string> RetrieveFiles(string directory, List<string> infiles)
{
// Take care of the files in the top directory
List<string> toadd = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly).ToList();
toadd.Sort(new NaturalComparer());
infiles.AddRange(toadd);
// Then recurse through and add from the directories
List<string> 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;
}
/// <summary> /// <summary>
/// Get what type of DAT the input file is /// Get what type of DAT the input file is
/// </summary> /// </summary>
@@ -193,6 +168,30 @@ namespace SabreTools.Helper.Tools
} }
} }
/// <summary>
/// Get all empty folders within a root folder
/// </summary>
/// <param name="root">Root directory to parse</param>
/// <returns>IEumerable containing all directories that are empty, an empty enumerable if the root is empty, null otherwise</returns>
public static IEnumerable<string> 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<string>();
}
// Otherwise, get the complete list
return Directory.EnumerateDirectories(root, "*", SearchOption.AllDirectories)
.Where(dir => Directory.EnumerateFileSystemEntries(dir, "*", SearchOption.AllDirectories).Count() == 0);
}
/// <summary> /// <summary>
/// Retrieve file information for a single file /// Retrieve file information for a single file
/// </summary> /// </summary>
@@ -250,6 +249,31 @@ namespace SabreTools.Helper.Tools
return rom; return rom;
} }
/// <summary>
/// Retrieve a list of files from a directory recursively in proper order
/// </summary>
/// <param name="directory">Directory to parse</param>
/// <param name="infiles">List representing existing files</param>
/// <returns>List with all new files</returns>
public static List<string> RetrieveFiles(string directory, List<string> infiles)
{
// Take care of the files in the top directory
List<string> toadd = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly).ToList();
toadd.Sort(new NaturalComparer());
infiles.AddRange(toadd);
// Then recurse through and add from the directories
List<string> 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 #endregion
#region File Manipulation #region File Manipulation