2016-05-10 7 views
-2

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

Это обновление папки веб-сайта, к которой осуществляется доступ через IIS, тогда этот процесс происходит, когда пользователи регистрируются на веб-сайте.

Вы не представляете, что может быть?

Exception.Message =

Доступ к пути 'W: \ Inetpub \ Wwwroot \ сайт \ Recursos \ Css \ Fonts \ Roboto-light_0-webfont.ttf' отказано.

Сообщение: Доступ к пути 'W: \ Inetpub \ Wwwroot \ сайт \ Recursos \ Css \ Fonts \ Roboto-light_0-webfont.ttf' отказано. StackTrace: at System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.SetAttributes (путь String, FileAttributes fileAttributes) в ServicoAtualizador.Utilitarios.Pacote.DeletarArquivos (список 1 Ignorar, String[] files) in d:\WOOBA_WORKSPACE_2010\WoobaWebDesk\Source\Development\aspWoobaWebDesk\ServicoAtualizador\Utilitarios\Pacote.cs:line 77 at ServicoAtualizador.Utilitarios.Pacote.DeleteDirectory(String target_dir, List 1 Ignorar, Boolean deletarRaiz) в d: \ WOOBA_WORKSPACE_2010 \ WoobaWebDesk \ Source \ Development \ aspWoobaWebDesk \ ServicoAtualizador \ Utilitarios \ Pacote.cs: строка 46 в ServicoAtualizador.Utilitarios.Pacote.DeleteDirectory (String target_dir, List 1 Ignorar, Boolean deletarRaiz) in d:\WOOBA_WORKSPACE_2010\WoobaWebDesk\Source\Development\aspWoobaWebDesk\ServicoAtualizador\Utilitarios\Pacote.cs:line 37 at ServicoAtualizador.Utilitarios.Pacote.DeleteDirectory(String target_dir, List 1 Игнорировать, Boolean deletearRaiz) в d: \ WOOBA_WORKSPACE_2010 \ WoobaWebDesk \ Source \ Development \ aspWoobaWebDesk \ ServicoAtualizador \ Utilitarios \ Pacote.cs: строка 37 в ServicoAtualizador.Utilitarios.Pacote.DeleteDirectory (String target_dir, List 1 Ignorar, Boolean deletarRaiz) in d:\WOOBA_WORKSPACE_2010\WoobaWebDesk\Source\Development\aspWoobaWebDesk\ServicoAtualizador\Utilitarios\Pacote.cs:line 37 at ServicoAtualizador.Processamento.ProcessarAtualizacao(String Aplicacao, DirectoryItem arquivo, AtualizacaoItemProduto itemProduto, AtualizacaoItem item, List 1 colecao) в d: \ WOOBA_WORKSPACE_2010 \ WoobaWebDesk \ Source \ Development \ aspWoobaWebDesk \ ServicoAtualizador \ Processamento.cs: строка 227 Источник: mscorlib

КОД:

public static void DeleteDirectory(string target_dir, List<string> Ignorar = null, bool deletarRaiz = true) 
    { 
     string[] files = Directory.GetFiles(target_dir); 
     string[] dirs = Directory.GetDirectories(target_dir); 

     DeletarArquivos(Ignorar, files); 

     foreach (string dir in dirs) 
     { 
      DeleteDirectory(dir); 
     } 

     if (deletarRaiz) 
     { 
      int contador = 0; 
      while (Directory.GetFiles(target_dir).Any()) // prevent directory is not empty 
      { 
       System.Threading.Thread.Sleep(200); 
       DeletarArquivos(Ignorar, Directory.GetFiles(target_dir)); 
       contador++; 
       if (contador >= 3) 
        throw new ArgumentException("Não possível deletar os arquivos, diretório:" + target_dir); 
      } 

      Directory.Delete(target_dir, false); 
     } 
    } 

    private static void DeletarArquivos(List<string> Ignorar, string[] files) 
    { 
     foreach (string file in files) 
     { 
      FileInfo Info = new FileInfo(file); 

      if (Ignorar != null) 
      { 
       if (Ignorar.Any(o => o.Equals(Info.Name, StringComparison.OrdinalIgnoreCase))) 
        continue; 
      } 

      if (Info.IsReadOnly) 
       Info.IsReadOnly = false; 

      var attr = File.GetAttributes(file); 

      if ((attr & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) 
      { 
       File.SetAttributes(file, attr^FileAttributes.ReadOnly); 
      } 
      File.SetAttributes(file, FileAttributes.Normal); //...error here 
      File.Delete(file); 
     } 
    } 

ответ

0

Есть любое количество причин, почему вы бы получить это исключение, но, не зная больше о том, что происходит, это невозможно сказать. Может быть, если файл был загружен через IIS, у IIS все еще может быть дескриптор. Вы уверены, что выбрали какие-либо потоки или доступ к файлам?

В любом случае, я бы обернул попытку удалить файл в блоке try/catch и зарегистрировать любые сбои. Таким образом, ваше приложение не будет разбиваться, и вы можете легко увидеть, какие файлы вызывают проблемы. Может быть, в следующий раз, когда он попытается удалить, он будет работать. Зависит от того, как долго хранится файл.

Как я уже сказал, без лишнего фона мы не можем сказать, но try/catch - это то, что вы всегда должны делать в таком случае, поэтому я бы добавил это и посмотрел, как вы это делаете.

Надеюсь, что это поможет.

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