mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-14 02:37:08 -07:00
Fixed: Directory not empty exception deleting nested empty subdirs (#974)
This commit is contained in:
parent
31cb5fe523
commit
254a8ce64c
2 changed files with 25 additions and 2 deletions
|
@ -122,6 +122,21 @@ namespace NzbDrone.Common.Test.DiskTests
|
|||
Directory.Exists(sourceDir).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_able_to_delete_nested_empty_subdirs()
|
||||
{
|
||||
var artistDir = Path.Combine(GetTempFilePath(), "Artist");
|
||||
var albumDir = Path.Combine(artistDir, "Album");
|
||||
|
||||
Directory.CreateDirectory(Path.Combine(albumDir));
|
||||
Directory.CreateDirectory(Path.Combine(albumDir, "Album"));
|
||||
Directory.CreateDirectory(Path.Combine(albumDir, "Album", "CD1"));
|
||||
Directory.CreateDirectory(Path.Combine(albumDir, "Album", "CD2"));
|
||||
|
||||
Subject.RemoveEmptySubfolders(artistDir);
|
||||
Directory.Exists(albumDir).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void empty_folder_should_return_folder_modified_date()
|
||||
{
|
||||
|
|
|
@ -154,6 +154,13 @@ namespace NzbDrone.Common.Disk
|
|||
return _fileSystem.Directory.GetDirectories(path);
|
||||
}
|
||||
|
||||
public string[] GetDirectories(string path, SearchOption searchOption)
|
||||
{
|
||||
Ensure.That(path, () => path).IsValidPath();
|
||||
|
||||
return _fileSystem.Directory.GetDirectories(path, "*", searchOption);
|
||||
}
|
||||
|
||||
public string[] GetFiles(string path, SearchOption searchOption)
|
||||
{
|
||||
Ensure.That(path, () => path).IsValidPath();
|
||||
|
@ -500,10 +507,11 @@ namespace NzbDrone.Common.Disk
|
|||
|
||||
public void RemoveEmptySubfolders(string path)
|
||||
{
|
||||
var subfolders = GetDirectories(path);
|
||||
var subfolders = GetDirectories(path, SearchOption.AllDirectories);
|
||||
var files = GetFiles(path, SearchOption.AllDirectories);
|
||||
|
||||
foreach (var subfolder in subfolders)
|
||||
// By sorting by length descending we ensure we always delete children before parents
|
||||
foreach (var subfolder in subfolders.OrderByDescending(x => x.Length))
|
||||
{
|
||||
if (files.None(f => subfolder.IsParentPath(f)))
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue