diff --git a/src/Common/Common.csproj b/src/Common/Common.csproj index f64ab181..33352055 100644 --- a/src/Common/Common.csproj +++ b/src/Common/Common.csproj @@ -5,6 +5,7 @@ + diff --git a/src/Common/FileUtilities.cs b/src/Common/FileUtilities.cs new file mode 100644 index 00000000..cbf31666 --- /dev/null +++ b/src/Common/FileUtilities.cs @@ -0,0 +1,36 @@ +using System.IO; +using System.IO.Abstractions; + +namespace Common; + +public class FileUtilities : IFileUtilities +{ + private readonly IFileSystem _fileSystem; + + public FileUtilities(IFileSystem fileSystem) + { + _fileSystem = fileSystem; + } + + public void DeleteReadOnlyDirectory(string directory) + { + if (!_fileSystem.Directory.Exists(directory)) + { + return; + } + + foreach (var subdirectory in _fileSystem.Directory.EnumerateDirectories(directory)) + { + DeleteReadOnlyDirectory(subdirectory); + } + + foreach (var fileName in Directory.EnumerateFiles(directory)) + { + var fileInfo = _fileSystem.FileInfo.FromFileName(fileName); + fileInfo.Attributes = FileAttributes.Normal; + fileInfo.Delete(); + } + + _fileSystem.Directory.Delete(directory); + } +} diff --git a/src/Common/IFileUtilities.cs b/src/Common/IFileUtilities.cs new file mode 100644 index 00000000..ef5aab55 --- /dev/null +++ b/src/Common/IFileUtilities.cs @@ -0,0 +1,6 @@ +namespace Common; + +public interface IFileUtilities +{ + void DeleteReadOnlyDirectory(string directory); +} diff --git a/src/Trash/CompositionRoot.cs b/src/Trash/CompositionRoot.cs index ba7ec277..673b352c 100644 --- a/src/Trash/CompositionRoot.cs +++ b/src/Trash/CompositionRoot.cs @@ -5,6 +5,7 @@ using System.Reflection; using Autofac; using Autofac.Core.Activators.Reflection; using CliFx; +using Common; using Serilog; using Serilog.Core; using Trash.Command.Helpers; @@ -79,6 +80,7 @@ public static class CompositionRoot public static IContainer Setup(ContainerBuilder builder) { builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterModule(); builder.RegisterType().As();