private static void RecurseDelete(string directory)
{
// m_logger.DebugFormat("Dir: {0}", directory);
if (!Directory.Exists(directory))
{
return;
}
DirectorySecurity dirSecurity = Directory.GetAccessControl(directory);
dirSecurity.AddAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name, FileSystemRights.FullControl, AccessControlType.Allow));
Directory.SetAccessControl(directory, dirSecurity);
File.SetAttributes(directory, FileAttributes.Normal);
DirectoryInfo di = new DirectoryInfo(directory);
if ((di.Attributes & FileAttributes.ReparsePoint) != 0)
{
// m_logger.DebugFormat("{0} is a reparse point, just deleting without recursing", directory);
Directory.Delete(directory, false);
return;
}
string[] files = Directory.GetFiles(directory);
string[] dirs = Directory.GetDirectories(directory);
// Files
foreach (string file in files)
{
try
{
// m_logger.DebugFormat("File: {0}", file);
FileSecurity fileSecurity = File.GetAccessControl(file);
fileSecurity.AddAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name, FileSystemRights.FullControl, AccessControlType.Allow));
File.SetAccessControl(file, fileSecurity); // Set the new access settings.
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
catch (Exception ex)
{
m_logger.Debug(ex.Message);
}
}
// Recurse each dir
foreach (string dir in dirs)
{
try
{
RecurseDelete(dir);
}
catch (Exception ex)
{
m_logger.Debug(ex.Message);
}
}
try
{
Directory.Delete(directory, false);
}
catch (Exception ex)
{
m_logger.Debug(ex.Message);
}
}