Я пытаюсь удалить каждую папку, содержащую пользовательское имя пользователя, и содержимое, расположенное в C:\Users\User, например:
foreach (var subdir in directory.GetDirectories().Where(subdir => subdir.Name.ToLower().Contains(Environment.UserName))) {
try {
Directory.Delete(subdir.FullName, true);
} catch (Exception exception) {
Console.Write("Deleting " + subdir.FullName + " caused exception: \n" + exception);
}
}
Когда я пытаюсь запустить двоичный файл Windows Form, я получаю сообщение об ошибке "System.UnauthorizedAccessException" в ошибке mscorlib.dll, когда он попадает в первую пару файлов. Вот что, я запускаю его как администратор, я могу удалить эти файлы в проводнике без проблемы (или даже приглашения UAC), и нет процесса блокировки/использования этих файлов.
Что происходит?
swap directory.delete для этого вызова
//Directory.Delete alternative
public void DeleteDirectory(string targetDir)
{
File.SetAttributes(targetDir, FileAttributes.Normal);
string[] files = Directory.GetFiles(targetDir);
string[] dirs = Directory.GetDirectories(targetDir);
foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
foreach (string dir in dirs)
{
DeleteDirectory(dir);
}
Directory.Delete(targetDir, false);
}
На самом деле есть еще одна причина для этого: внутри каталога у вас может быть скрытый раздражающий файл с именем "Thumb.db", который содержит информацию о миниатюре всех ваших файлов. Иногда этот файл не закрывается, если вы не прекратите работу explorer.exe через диспетчер задач или не завершите работу своего компьютера и не получите "неустранимую" папку.
Чтобы избавиться от этой раздражающей штуки, следуйте инструкциям здесь :)