Removendo bloqueios de arquivos
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.
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.