Domanda

Ho implementato un'operazione di "risparmi sicuro" che va qualcosa come questo:

  1. Salva alcuni dati a A file temporaneo
  2. Copia contenuto di A a B destinazione finale
  3. Elimina A

Ho una condizione di competizione al punto 3 in cui Mac OS X a volte tornare indietro con l'errore -47 (fBsyErr) quando si tenta di eliminare il file utilizzando FSDeleteObject. Sono completamente sicuro io sono l'unico modifica di questo file e il sospetto che il sistema operativo sta facendo qualcosa (ad esempio, le operazioni in background caching) al momento cerco di eliminare il file, con conseguente errore.

Questo è un problema intermittente: normalmente la chiamata FSDeleteObject funziona bene. Nei casi in cui ottengo il codice di errore di nuovo mi piacerebbe eliminare in modo sicuro il file "in un secondo momento", quando il sistema operativo è finito di giocare con esso.

Quale sarebbe la migliore linea di azione da intraprendere per cercare di eliminare questo file temporaneo fastidioso?

È stato utile?

Soluzione

Ecco quello che sta accadendo:

  
      
  1. La causa più comune di FSDeleteObject non aver temporaneamente con fBsyErr è che Spotlight è nel processo di indicizzazione del file. Se si modifica un file, chiuderlo e quindi provare subito per cancellarlo usando FSDeleteObject, è molto probabile che l'indicizzatore Spotlight avrà aperto e si otterrà fBsyErr.
  2.   
  3. Alcuni scanner anti-virus di terze parti possono anche innescare questo problema. Quando si chiude un file modificato, lo scanner anti-virus inizia immediatamente a controllare la presenza di virus. Se ancora il controllo quando si tenta di eliminare il file, FSDeleteObject fallirà con fBsyErr.
  4.   

Ogni problema ha una serie di soluzioni alternative, il meglio per entrambi è quello di utilizzare unlink

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top