código de erro para O processo não pode acessar o arquivo 'XYZ' porque ele está sendo usado por outro processo

StackOverflow https://stackoverflow.com/questions/3259303

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:

  1. 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."

Foi útil?

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

há um HResult propriedade sobre o (IO)Exceção de que contém um código de erro.De acordo com este lista o código de erro para o seu exceção deve ser 0x20 (eu não tentar, que embora).Espero que ajude.

(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?).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top