Pergunta

Eu quero escrever para / excluir um arquivo, mas às vezes eu fico um acidente se o arquivo está em uso por outro programa. Como posso verificar se o arquivo é aberto por outro processo ou eu posso abri-lo para a escrita?

Foi útil?

Solução

O problema é que, entre o momento em que você verificar para ver se você pode obter acesso exclusivo e abrir o arquivo, outra coisa tem acesso exclusivo ao arquivo, e você começa a exceção de qualquer maneira.

A única enganar maneira à prova para ver se você pode obter um bloqueio exclusivo em um arquivo é para tentar obter um bloqueio exclusivo no arquivo, se você consegue, você tê-lo.

Se não, você capturar a exceção, e quer

  • Vá fazer outra coisa
  • Aguarde um pouco e tente novamente

É uma das situações da vida em que é melhor pedir perdão do que permissão:)

Outras dicas

Há uma nova maneira de obter a origem do bloqueio de arquivos para o Vista e até aqui: http: // www. remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/

UserMode: A melhor maneira de escrever para um arquivo bloqueado é perguntar ao usuário para fechá-lo em outro processo. Em processos descontínuos que você deve ignorar tal arquivo um e registrar o problema. Fornecendo o nome de outro processo é uma maneira muito boa para encontrar uma solução para o usuário.

Não tenho certeza em que a programação idioma que você gostaria de verificar se você pode escrever para um arquivo. Em Java, java.io .File.canWrite () pode fazer o trabalho para você.

Geral:

No UNIX-like OS, você pode usar o comando lsof .

Se você quiser ver qual o programa que contém um identificador para o arquivo, use o Process monitor (download da Microsoft).

Esta ferramenta tem uma interface de linha de comando, assim que você poderia usar do seu idioma da interface scripting (por exemplo java.lang.Process) para executar a ferramenta e exibir uma mensagem de erro útil.

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