Pergunta

Eu implementei uma operação de "salvamento seguro" que vai algo assim:

  1. Salve alguns dados no arquivo temporário A
  2. Copiar conteúdo de A para o destino final B
  3. Excluir A

Eu tenho uma condição de corrida na Etapa 3, onde o Mac OS X ocasionalmente voltará com o erro -47 (fBsyErr) ao tentar excluir o arquivo usando FSDeleteObject. Estou completamente confiante de que sou o único que modifica esse arquivo e suspeito que o sistema operacional está fazendo algo (por exemplo, tarefas de cache de fundo) no momento em que tento excluir o arquivo, resultando no erro.

Esta é uma questão intermitente: normalmente o FSDeleteObject Chamada funciona muito bem. Nos casos em que eu recebo o código de erro de volta, gostaria de excluir com segurança o arquivo "em um momento posterior", quando o sistema operacional terminar de jogar com ele.

Qual seria o melhor curso de ação para tentar excluir esse arquivo temporário problemático?

Foi útil?

Solução

Aqui está o que está acontecendo:

  1. A causa mais comum de FSDeleteObject falhando temporariamente com fBsyErr é que os holofotes estão no processo de indexação do arquivo. Se você modificar um arquivo, feche -o e, em seguida, tente excluí -lo usando -o usando FSDeleteObject, é bem possível que o indexador do Spotlight seja aberto e você terá fBsyErr.
  2. Alguns scanners antivírus de terceiros também podem desencadear esse problema. Quando você fecha um arquivo modificado, o scanner antivírus começa imediatamente a verificar se há vírus. Se ainda estiver verificando quando você tenta excluir o arquivo, FSDeleteObject falhará com fBsyErr.

Cada problema tem uma série de soluções alternativas, a melhor para ambos é usar unlink

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