2016-02-05 2 views
0

Привет, ребята, я работаю над программой, она удаляет определенные файлы каталогов, в основном временные файлы, за исключением того, что я получаю сообщение об ошибке, даже знаю, что добавил блок catch. Исключение System.UnauthorizedAccessException. на сточный IOException я получаю ошибку там:C# Доступ к пути отрицается

private void DeleteInternetFiles(string internetDirectory) 
{ 
    DirectoryInfo internetTempStorage = new DirectoryInfo(internetDirectory); 
    try 
    { 
     //this will delete files 
     foreach (FileInfo getNetFileInfo in internetTempStorage.GetFiles()) 
     { 
      getNetFileInfo.Delete(); 
     } 

     //this will loop through and delete folders 
     foreach (DirectoryInfo tempDirectoryInformation in internetTempStorage.GetDirectories()) 
     {   
      tempDirectoryInformation.Delete(); 
     } 
    } 

    //catch io exception and try delete file again 
    catch (IOException) 
    { 
     //delete file in this directory 
     File.Delete(internetDirectory); 

     //delete folders in this directory 
     Directory.Delete(internetDirectory); 
    } 

    //catch access exception and delete file again 
    catch (UnauthorizedAccessException) 
    { 
     //delete file in this directory 
     File.Delete(internetDirectory); 

     //delete folders in this directory 
     Directory.Delete(internetDirectory); 

    } 
} 

И это одно ниже то, как я вызываю метод:

if (checkBox1.Checked) 
{ 
    DeleteInternetFiles(@"C:\Users\" + Environment.UserName + @" \AppData\Local\Microsoft\Windows\Temporary Internet Files"); 
} 
+0

Также параметр в методе DeleteInternetFiles называется string internetDirectory, по какой-то причине его не удается опубликовать. – DialUp

+0

Второй блок catch только улавливает UnauthorizedAccessException из кода в исходной попытке, а не изнутри первого блока catch. – BurningLights

ответ

2

Ваш второй вызов File.Delete(internetDirectory);, внутри блока поймать, кажется, скорее всего, будет проблема. Программа уже столкнулась с ошибкой при попытке удалить файл, а затем повторила попытку. Две вещи могут случаться:

  1. Учетная запись пользователя выполнения программы не имеет разрешения на удалять файлы в каталоге другого пользователя.

  2. Некоторые файл все еще в использовании и, следовательно, не могут быть удалены (например, в настоящее время открыт в Internet Explorer.

Вы можете изучить ответы в C# - How to Delete temporary internet files. Обратите внимание на комментарии по поводу возможности иметь «убить IE».

+0

Не работает эта ссылка:/Я пробовал такую ​​же ошибку. – DialUp

0

проблема, которую я вижу здесь является то, что удаление действия вы выполняете, требует Administrator привилегии.

что вы можете сделать, это попытаться правой кнопкой мыши> Запустите приложение «Администратор» и затем выполните действие.

Если вы хотите предложить пользователю поднять ваше приложение, вы можете сделать это.

Force application to Run as Administrator [Winforms only]

+0

Сделал это, я щелкнул правой кнопкой мыши как администратор по-прежнему той же ошибкой. – DialUp

+0

Bump. просто наткнулся на этот пост. – DialUp

0

Вы получаете эту ошибку, потому что файл или папку, которую вы пытаетесь удалить, не это права доступа.

Это может произойти в вашем случае из-за того, что какой-либо файл используется в настоящий момент во время выполнения операции удаления.

Существует больше возможностей использования файла, поскольку вы удаляете из папки, используемой для использования во временном пользовании окнами os.

Смежные вопросы