From c28a97cafdcb2d068cdca185ed9ceeb40027bddd Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 24 Mar 2025 19:14:58 -0700 Subject: [PATCH] Fixed: Deleting artist folder fails when files/folders aren't instantly removed (cherry picked from commit c84699ed5d5a2f59f236c26a8999d25a1102ec02) --- src/NzbDrone.Common/Disk/DiskProviderBase.cs | 22 ++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common/Disk/DiskProviderBase.cs b/src/NzbDrone.Common/Disk/DiskProviderBase.cs index dfdb6b54c..01aaaaded 100644 --- a/src/NzbDrone.Common/Disk/DiskProviderBase.cs +++ b/src/NzbDrone.Common/Disk/DiskProviderBase.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Abstractions; using System.Linq; +using System.Threading; using NLog; using NzbDrone.Common.EnsureThat; using NzbDrone.Common.EnvironmentInfo; @@ -306,9 +307,26 @@ namespace NzbDrone.Common.Disk { Ensure.That(path, () => path).IsValidPath(PathValidationType.CurrentOs); - var files = GetFiles(path, recursive); + var files = GetFiles(path, recursive).ToList(); - files.ToList().ForEach(RemoveReadOnly); + files.ForEach(RemoveReadOnly); + + var attempts = 0; + + while (attempts < 3 && files.Any()) + { + EmptyFolder(path); + + if (GetFiles(path, recursive).Any()) + { + // Wait for IO operations to complete after emptying the folder since they aren't always + // instantly removed and it can lead to false positives that files are still present. + Thread.Sleep(3000); + } + + attempts++; + files = GetFiles(path, recursive).ToList(); + } _fileSystem.Directory.Delete(path, recursive); }