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#?

Foi útil?

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.

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