TempDirectory
using System;
using System.IO;
namespace Relativity.Transfer
{
public class TempDirectory : IDisposable
{
private bool disposed;
public bool ClearReadOnlyAttributes { get; set; }
public bool DeleteDirectory { get; set; }
public string Directory { get; set; }
public TempDirectory()
: this(GlobalSettings.Instance.TempDirectory)
{
}
public TempDirectory(string parentDirectory)
{
if (string.IsNullOrEmpty(parentDirectory))
throw new ArgumentNullException("parentDirectory");
ClearReadOnlyAttributes = false;
DeleteDirectory = true;
Directory = Path.Combine(parentDirectory, "RelativityTmpDir_" + DateTime.Now.Ticks.ToString() + "_" + Guid.NewGuid().ToString());
}
public void Create()
{
if (!System.IO.Directory.Exists(Directory))
System.IO.Directory.CreateDirectory(Directory);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!disposed) {
if (disposing) {
if (DeleteDirectory && !string.IsNullOrEmpty(Directory) && System.IO.Directory.Exists(Directory))
ClearDirectory();
Directory = null;
}
disposed = true;
}
}
private void ClearDirectory()
{
try {
if (ClearReadOnlyAttributes)
ClearAttributes();
System.IO.Directory.Delete(Directory, true);
} catch (IOException) {
} catch (UnauthorizedAccessException) {
}
}
private void ClearAttributes()
{
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);
}
}
public bool Exists()
{
return System.IO.Directory.Exists(Directory);
}
}
}