refactor: New FileUtilities class

For recursively deleting read-only directories.
pull/47/head
Robert Dailey 2 years ago
parent 62c3e5c6a2
commit 38ac68dbb7

@ -5,6 +5,7 @@
<PackageReference Include="Flurl.Http" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="Serilog" />
<PackageReference Include="System.IO.Abstractions" />
<PackageReference Include="System.Reactive" />
<PackageReference Include="YamlDotNet" />
</ItemGroup>

@ -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);
}
}

@ -0,0 +1,6 @@
namespace Common;
public interface IFileUtilities
{
void DeleteReadOnlyDirectory(string directory);
}

@ -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<FileSystem>().As<IFileSystem>();
builder.RegisterType<FileUtilities>().As<IFileUtilities>();
builder.RegisterModule<CacheAutofacModule>();
builder.RegisterType<CacheStoragePath>().As<ICacheStoragePath>();

Loading…
Cancel
Save