Невозможно рекурсивно удалить папки в папке пользователя. «System.UnauthorizedAccessException» произошло в mscorlib.dll

1

Я пытаюсь удалить каждую папку, содержащую пользовательское имя пользователя, и содержимое, расположенное в 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), и нет процесса блокировки/использования этих файлов.

Что происходит?

  • 0
    это Windows или веб-приложение, из которого вы запускаете его, если web, то IIS_USER требует те же права на чтение / запись, что и для вашей учетной записи пользователя
  • 0
    Извините, это приложение Windows Form. Редактировать: DJ Craze это потрясающий диджей. Не уверен, что ваш логин отдает ему должное.
Показать ещё 10 комментариев
Теги:
file
winforms

2 ответа

2
Лучший ответ

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);
}
  • 0
    Это сработало. Есть идеи, почему Directory.Delete () этого не сделал?
  • 1
    только для чтения или какой-либо другой атрибут файла - все, что он делает, это сначала удаляет их (File.SetAttributes). Не правда ли, чтобы иметь возможность лишить атрибуты, а затем сделать то же самое!
Показать ещё 3 комментария
1

На самом деле есть еще одна причина для этого: внутри каталога у вас может быть скрытый раздражающий файл с именем "Thumb.db", который содержит информацию о миниатюре всех ваших файлов. Иногда этот файл не закрывается, если вы не прекратите работу explorer.exe через диспетчер задач или не завершите работу своего компьютера и не получите "неустранимую" папку.

Чтобы избавиться от этой раздражающей штуки, следуйте инструкциям здесь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню