Question

Je l'ai mis en place une opération « sauvegarde sécurisée » qui ressemble à ceci:

  1. Enregistrer des données à A de fichier temporaire
  2. Copier le contenu de A à B destination finale
  3. Supprimer A

J'ai une condition de course à l'étape 3, où Mac OS X à l'occasion de revenir avec l'erreur -47 (fBsyErr) lorsque vous essayez de supprimer le fichier en utilisant FSDeleteObject. Je suis, je suis tout à fait confiant la seule modification de ce fichier et soupçonne que le système d'exploitation est en train de faire quelque chose (par exemple, les tâches de mise en cache de fond) au moment où je tente de supprimer le fichier, ce qui entraîne l'erreur.

Ceci est un problème intermittent: normalement l'appel FSDeleteObject fonctionne très bien. Dans les cas où je reçois le code d'erreur de retour, je voudrais supprimer en toute sécurité le fichier « à une date ultérieure dans le temps » lorsque le système d'exploitation est fini de jouer avec elle.

Quel serait le meilleur plan d'action à prendre pour tenter de supprimer ce fichier temporaire gênant?

Était-ce utile?

La solution

est ce qui se passe:

  
      
  1. La cause la plus fréquente de FSDeleteObject ne temporairement fBsyErr est que Spotlight est en train d'indexer le fichier. Si vous modifiez un fichier, fermez-le, puis immédiatement essayer de supprimer à l'aide FSDeleteObject, il est tout à fait possible que le projecteur indexeur aura ouvert et vous aurez fBsyErr.
  2.   
  3. Certains tiers scanners anti-virus peuvent également déclencher ce problème. Lorsque vous fermez un fichier modifié, le scanner antivirus commence immédiatement à vérifier pour les virus. Si elle est en train de vérifier lorsque vous essayez de supprimer le fichier, FSDeleteObject échouera avec fBsyErr.
  4.   

Chaque problème a une série de solutions de contournement, le meilleur pour les deux est d'utiliser unlink

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top