Como identificar se a pasta está aberta?
-
22-09-2019 - |
Pergunta
No meu aplicativo, estou tentando renomear a pasta, mas se a pasta for aberta no Windows Explorer, eu recebo um IOException
. Como posso identificar se a pasta é aberta no Windows Explorer em C#?
Solução
pegar a ioexception?
Como outros disseram, tente fazer o que quiser, pegue a exceção se isso acontecer e tomar as medidas apropriadas, seja o que for no seu contexto.
Você realmente não tem muita escolha como eu vejo, considere:
bool iHaveAccess = CheckAccess(folder);
if (iHaveAccess)
{
RenameFolder(folder,newFolderName);
}
O que acontece se entre o sucesso do checkAccess e o chamado RenameFolder outra coisa trava a pasta? O que você vai fazer então?
Outras dicas
Não é razoável determinar se um programa possui uma pasta aberta de tal maneira que o impeça de renomeá -lo. Porque imediatamente depois de fazer a determinação, outro processo pode iniciar ou parar de usar a pasta. Em vez disso, basta fazer a operação e capturar a exceção resultante.
try {
Directory.Move("old","new");
return true;
} catch ( IOException ) {
return false;
}
Depois de uma pequena pesquisa, encontrei esta postagem e esta postagem que mostram várias técnicas de como você pode determinar programaticamente qual processo bloqueou um arquivo. Um deles deve permitir que você verifique se o Explorer tem a pasta bloqueada.