código de erro para O processo não pode acessar o arquivo 'XYZ' porque ele está sendo usado por outro processo
-
16-09-2020 - |
Pergunta
Eu usando o C# .NET , vs 2008 , .net 3.5
Para mim, é difícil, mas eu preciso de exemplo de código em C# para isso:
- Como obter o código de erro de IOException "O processo não pode acessar o arquivo 'XYZ' porque ele está sendo usado por outro processo."
Por exemplo, no meu problema.
Eu tente apagar o arquivo, e recebo a mensagem "O processo não pode acessar o arquivo 'XYZ' porque ele está sendo usado por outro processo." Exceção.
try
{
File.Delete(infoFichero.Ruta);
}
catch (IOException ex)
{
// ex.Message == "The process cannot access the file 'XYZ' because it is being used by another process."
}
Mas, se .NET é o espanhol, eu recebo "El proceso não pode obtener acceso al archivo '00000004.PDF' porque encontra-se siendo utilizado en otro proceso de mensagem".
System.IO.IOException: El proceso no puede obtener acceso al archivo '00000004.PDF' porque está siendo utilizado en otro proceso.
en System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
en System.IO.FileInfo.Delete()
Eu preciso de um CÓDIGO de ERRO para essa Exceção.Em Rastreamento, tenho visto Sistema.IO.__Erro.WinIOError(Int32 errorCode, maybeFullPath Cadeia)
Como obter o código de erro de IOException "O processo não pode acessar o arquivo 'XYZ' porque ele está sendo usado por outro processo."
Solução
Você deve ter notado que o HResult propriedade não está acessível.A solução é usar o Marechal.GetLastWin32Error() método para obter o nativo código de erro do Windows.Como esta:
catch (IOException ex) {
int err = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
if (err == 32) Console.WriteLine("It's locked");
// etc..
}
Código de erro 32 é chamado ERROR_SHARING_VIOLATION no SDK.
Outras dicas
(marcado CW porque isso é realmente apenas um longo comentário)
Por que você precisa do código de erro?
- Você vai tomar uma ação com base em um código em relação a outro código?
- O que você vai fazer se o Windows ou .Alterações de rede, de modo que de repente você está recebendo um código de erro diferente de volta para o mesmo problema?
- O que você quer fazer se você não pode excluir o mesmo arquivo, mas por um motivo diferente?Na verdade, talvez o seu problema novo, não vai mesmo lançar uma
IOException
.
Ter um olhar para o HRESULT
propriedade do IOException classe.Isso deve retornar o Win32 HRESULT da operação (que é o que eu acho que você está procurando?).