Fixed recursion issue when emptying recycle bin

This commit is contained in:
Taloth Saldono
2020-05-16 19:08:55 +02:00
committed by Qstick
parent 83679214b3
commit e8e852100c
3 changed files with 49 additions and 12 deletions
+14 -7
View File
@@ -146,7 +146,7 @@ namespace NzbDrone.Common.Disk
{
Ensure.That(path, () => path).IsValidPath();
return Directory.EnumerateDirectories(path).Empty();
return Directory.EnumerateFileSystemEntries(path).Empty();
}
public string[] GetDirectories(string path)
@@ -526,14 +526,21 @@ namespace NzbDrone.Common.Disk
public void RemoveEmptySubfolders(string path)
{
var subfolders = GetDirectories(path);
var files = GetFiles(path, SearchOption.AllDirectories);
foreach (var subfolder in subfolders)
// Depth first search for empty subdirectories
foreach (var subdir in Directory.EnumerateDirectories(path))
{
if (files.None(f => subfolder.IsParentPath(f)))
RemoveEmptySubfolders(subdir);
if (Directory.EnumerateFileSystemEntries(subdir).Empty())
{
DeleteFolder(subfolder, false);
try
{
Directory.Delete(subdir, false);
}
catch (Exception ex)
{
Logger.Warn(ex, "Failed to remove empty directory {0}", subdir);
}
}
}
}