DirectoryInfo.Delete() will fail with UnauthorizedAccessException if that directory or any of its subdirectories contains a file that is read-only.
One solution is to remove the read-only attribute from all files. You can do so while recursively deleting directories. This approach is mentioned in some blogs and it looks as follows:
public static void RecursivelyDeleteDirectory( DirectoryInfo currentDirectory) { try { currentDirectory.Attributes = FileAttributes.Normal; foreach (var childDirectory in currentDirectory.GetDirectories()) { RecursivelyDeleteDirectory(childDirectory); } foreach (var file in currentDirectory.GetFiles()) { file.IsReadOnly = false; } currentDirectory.Delete(true); } catch (Exception ex) { Console.WriteLine(ex); // Better option: Use log4net } }
While this works some people do not like recursion. So here is an option for how the same can be achieved without recursion:
public static void DeleteDirectory( DirectoryInfo currentDirectory) { try { foreach (var file in currentDirectory.GetFiles( "*", SearchOption.AllDirectories)) { file.IsReadOnly = false; } currentDirectory.Delete(true); } catch (Exception ex) { Console.WriteLine(ex); // Better option: Use log4net } }
Please note that these implementations report exceptions at the console. A better option would be to use a standard logging framework like log4net.
0 comments:
Post a Comment
All comments, questions and other feedback is much appreciated. Thank you!