【问题标题】:Access to the path is denied.访问路径被拒绝。
【发布时间】:2016-05-10 14:29:12
【问题描述】:

小错误,时间执行删除文件的正常过程,另一个小时执行相同的过程我收到此错误。

这是通过 IIS 访问的网站文件夹的更新,然后在人们登录网站时发生此过程。

你不知道可以是什么?

异常消息 =

拒绝访问路径“W:\inetpub\wwwroot\site\Recursos\Css\Fonts\roboto-light_0-webfont.ttf”。

消息:对路径“W:\inetpub\wwwroot\site\Recursos\Css\Fonts\roboto-light_0-webfont.ttf”的访问被拒绝。 StackTrace:在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.SetAttributes(String path, FileAttributes fileAttributes) at ServicoAtualizador.Utilitarios.Pacote.DeletarArquivos(List1 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, List1 Ignorar, Boolean deletarRaiz ) 在 d:\WOOBA_WORKSPACE_2010\WoobaWebDesk\Source\Development\aspWoobaWebDesk\ServicoAtualizador\Utilitarios\Pacote.cs: 第 46 行 ServicoAtualizador.Utilitarios.Pacote.DeleteDirectory(String target_dir, List1 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, List1 Ignorar, Boolean deletarRaiz) 在 d: \WOOBA_WORKSPACE_2010\WoobaWebDesk\Source\Development\aspWoobaWebDesk\ServicoAtualizador\Utilitarios\Pacote.cs:第 37 行 ServicoAtualizador.Utilitarios.Pacote.DeleteDirectory(String target_dir, List1 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, List1 colecao) in d:\WOOBA_WORKSPACE_2010\Wooba Development\aspWoobaWebDesk\ServicoAtualizador\Processamento.cs:line 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);
        }
    }

【问题讨论】:

    标签: c# path file-attributes


    【解决方案1】:

    你会得到这个异常的原因有很多,但如果不知道发生了什么,就不可能说出来。可能是如果文件是通过 IIS 上传的,那么 IIS 可能仍然可以处理它。您确定您已处置任何流或文件访问权限吗?

    无论哪种方式,我都会将删除文件的尝试包装在 try/catch 块中,并记录任何失败。这样,您的应用程序就不会崩溃,并且您可以轻松查看哪些文件导致了问题。可能是下次它尝试删除时,它会起作用。取决于文件被保存多长时间。

    正如我所说,没有更多背景知识,我们不能说,但是在这种情况下,你应该始终执行 try/catch,所以我会添加它,看看你是怎么做的。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多