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!