FSDeleteObject 呼び出し時の競合状態
-
20-09-2019 - |
質問
次のような「安全な保存」操作を実装しました。
- 一部のデータを一時ファイルに保存する
A
- の内容をコピーする
A
最終目的地へB
- 消去
A
ステップ 3 で競合状態が発生し、Mac OS X が時々エラー -47 を返します (fBsyErr
) を使用してファイルを削除しようとすると、 FSDeleteObject
. 。このファイルを変更しているのは私だけであると完全に確信しており、ファイルを削除しようとしたときに OS が何か (バックグラウンド キャッシュ タスクなど) を行っているのではないかと疑っており、結果としてエラーが発生しました。
これは断続的に発生する問題です。通常は FSDeleteObject
通話は正常に機能します。エラー コードが返された場合は、OS がファイルの処理を終了したときに、「後の時点で」ファイルを安全に削除したいと思います。
この厄介な一時ファイルを削除しようとする場合、どのような行動をとるのが最善でしょうか?
解決
こちらです 何が起こっていますか:
- 最も一般的な原因は、
FSDeleteObject
一時的に失敗するfBsyErr
Spotlight がファイルのインデックスを作成中であるということです。ファイルを変更した場合は、ファイルを閉じてから、すぐに次のコマンドを使用して削除してみます。FSDeleteObject
, 、Spotlight インデクサーが開いている可能性が非常に高く、次の結果が得られます。fBsyErr
.- 一部のサードパーティ製ウイルス対策スキャナーもこの問題を引き起こす可能性があります。変更されたファイルを閉じると、ウイルス対策スキャナーがすぐにウイルスのチェックを開始します。ファイルを削除しようとしたときにまだチェックが行われている場合は、
FSDeleteObject
で失敗しますfBsyErr
.
それぞれの問題には一連の回避策があり、両方にとって最善の方法は次のとおりです。 unlink
所属していません StackOverflow