Pergunta

Eu preciso recuperar formar um caso de erro em que um arquivo é deixado em um estado bloqueado. Como eu no c # pode dizer este arquivo para redefini-la de fechaduras? Eu preciso adicionar a isso o arquivo é aberto por um terceiro dll festa e eu realmente não têm acesso ao identificador de arquivo.

Foi útil?

Solução

Você poderia talvez iniciar um processo de linha de comando como net ou PsFile com algo ao longo das linhas de:

System.Diagnostics.Process.Start("psfile c:\myfile.txt -c");

Você pode obter PsFile aqui .

Você também pode usar

net file ID /close

mas isso exigiria que você saiba o ID do arquivo, o que levaria um pouco mais de trabalho.

Não testado, mas isso deve dar-lhe um ponto de partida.

Outras dicas

Bloquear um ficheiro é da responsabilidade do sistema operacional (em nome do programa que abre-lo). Se um arquivo é deixado em um estado bloqueado, a sua realmente até o OS para desbloquear. Isso normalmente acontece automaticamente quando o processo que abriu as saídas de arquivo.

Há, no entanto, um utilitário muito legal que me deparei que vai ajudar. É chamado Unlocker .

Eu realmente considerar encontrar outra 3rd party dll. Qualquer sistema de manipulação Streams corretamente deve responder a condições de erro e não deixar as coisas como bloqueios de arquivos no lugar.

É possível que a biblioteca não oferece condição de erro se limpo, você acaba mais parecia ele? Tente algo como o seguinte,

 try {
   thirdPartyObj = new ThirdPartObj();
   // Some possible error causing object actions
 catch(Exception ex) {
   thirdPartyObj = null; // The object should close its resources
 }

Você tem que fechar o arquivo usando .Fechar (). Você precisa ter certeza de que você ainda tem uma maneira de acessar o objeto de arquivo.

Você geralmente pode evitar esse erro escrevendo um try {} ... finally {} construção após o código que faz seu arquivo I / O. No bloco finally {}, você chamar o método Close do seu objeto de arquivo, impedindo que esta condição. Você também pode usar um bloco usando {} quando você cria seus arquivos, e isso também vai cuidar deste problema.

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