TempDirectory2
Represents a disposable temporary directory class object. This class cannot be inherited.
using System;
using System.Diagnostics;
using System.IO;
namespace Relativity.DataExchange
{
public sealed class TempDirectory2 : IDisposable
{
private bool disposed;
public bool ClearReadOnlyAttributes { get; set; }
public bool DeleteDirectory { get; set; }
public string Directory { get; set; }
public TempDirectory2()
{
ClearReadOnlyAttributes = false;
DeleteDirectory = true;
Directory = Path.Combine(Path.GetTempPath(), "RelativityTmpDir_" + DateTime.Now.Ticks.ToString() + "_" + Guid.NewGuid().ToString());
}
public void Create()
{
System.IO.Directory.CreateDirectory(Directory);
}
public void Dispose()
{
Dispose(true);
}
public bool Exists()
{
return System.IO.Directory.Exists(Directory);
}
private void Dispose(bool disposing)
{
if (!disposed) {
if (disposing) {
if (DeleteDirectory && !string.IsNullOrEmpty(Directory) && System.IO.Directory.Exists(Directory))
try {
if (ClearReadOnlyAttributes) {
string[] files = System.IO.Directory.GetFiles(Directory, "*", SearchOption.AllDirectories);
foreach (string path in files) {
FileAttributes attributes = File.GetAttributes(path);
File.SetAttributes(path, attributes & ~FileAttributes.ReadOnly);
}
}
System.IO.Directory.Delete(Directory, true);
} catch (IOException ex) {
Trace.WriteLine("Failed to tear down the '" + Directory + "' temp directory due to an I/O issue. Exception: " + ex?.ToString());
} catch (UnauthorizedAccessException) {
}
Directory = null;
}
disposed = true;
}
}
}
}