Tenta excluir arquivos usados pelo IIS

1

Eu tenho um serviço codificado em c # whoes deletado alguns arquivos do site hospedados no iis, antes de uma atualização. Mas em algum momento quando eu apago os arquivos, eles ficam lá.

Se eu tentar excluí-los manualmente, via explorer, o arquivo não pode ser deletado, porque eles estão no estado "Delete pendente".

Existe a maneira como meu serviço tenta excluir o arquivo

 try
                {
                  // Enlève tout les attributs sur le fichiers afin de s'assurer que le fichier n'est pas en lecture seul
                  File.SetAttributes(file, FileAttributes.Normal);

                  // Supprime le fichier
                  File.Delete(file);
}

Existe uma maneira de evitar esse estado?

O que posso fazer para forçar a exclusão por código c #?

Posso liberar todo o processo para o arquivo por código c #?

O ambiente é

IIS 7.5 Windows 2008-r2 .net 4.0

Obrigado

    
por Cédric Boivin 11.11.2011 / 16:33

2 respostas

1

Você vai querer descobrir que outro processo tem os arquivos abertos. Eu não sei como você faria isso programaticamente, mas falando como um administrador de sistema, o utilitário handle.exe da SysInternals (ou sua ferramenta GUI do Process Explorer) pode mostrar isso para você em tempo real.

Então você vai querer:

  1. Evite a condição que faz com que o arquivo seja bloqueado pelo outro processo,
  2. Feche a alça se puder fazê-lo com segurança.
por 11.11.2011 / 17:19
0

Você pode obter uma lista dos arquivos que estão nesse estado por meio de aqui Eu não sei como seus arquivos acabam nesse estado, mas a primeira maneira que me vem à mente é renomear e, em seguida, excluir o arquivo há uma solução semelhante para C ++ em SO aqui

Em C #, deve ser algo como

File.Move(oldFileName, newFileName);
File.Delete(newFileName);
    
por 11.11.2011 / 18:42