簡體   English   中英

對路徑的訪問被拒絕。

[英]Access to the path is denied.

微不足道的錯誤,時間執行刪除文件的正常過程,另一個小時執行相同的過程我收到此錯誤。

這是通過 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) 在 System.IO.File.SetAttributes(String path, FileAttributes fileAttributes) 在 ServicoAtualizador.Utilitarios.Pacote.DeletarArquivos(List 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 OB2ooDesk Boolean Ignorarr) \\Source\\Development\\aspWoobaWebDesk\\ServicoAtualizador\\Utilitarios\\Pacote.cs:line 46 at 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 Ignorar, Boolean deletarRaiz) in d:\\WOOBA_WORKSPACE_2010\\WoobaWebDesk\\S ource\\Development\\aspWoobaWebDesk\\ServicoAtualizador\\Utilitarios\\Pacote.cs:line 37 at 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) in d:\\WOOBA_WORKSPACE\\WWW\\WebProcessooDesk\\WWW\\APLICAO\\APRICAO\\APLICAO\\a 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);
        }
    }

出現該異常的原因有很多,但如果不了解發生了什么,就不可能說出來。 可能是因為如果文件是通過 IIS 上傳的,那么 IIS 可能仍然可以處理它。 你確定你處理了任何流或文件訪問嗎?

無論哪種方式,我都會將刪除文件的嘗試包裝在 try/catch 塊中,並記錄任何失敗。 這樣,您的應用程序就不會崩潰,而且您可以輕松查看導致問題的文件。 可能是下次嘗試刪除時,它會起作用。 取決於文件保存的時間。

正如我所說,沒有更多的背景,我們不能說,但是在這種情況下,try/catch 是你應該始終做的事情,所以我會添加它,看看你如何進行。

希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM