[英]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.