سؤال

لقد قمت بتنفيذ عملية "حفظ آمنة" التي تمر بشيء مثل هذا:

  1. حفظ بعض البيانات إلى ملف مؤقت A
  2. نسخ محتويات A إلى الوجهة النهائية B
  3. حذف A

لدي حالة سباق في الخطوة 3 حيث تعود Mac OS X أحيانا مع الخطأ -47 (fBsyErr) عند محاولة حذف الملف باستخدام FSDeleteObject. وبعد أنا واثق تماما من أنني الوحيد الذي يعدل هذا الملف وشك في أن يقوم نظام التشغيل بعمل شيء (على سبيل المثال، مهام التخزين المؤقت للخلفية) في ذلك الوقت أحاول حذف الملف، مما يؤدي إلى الخطأ.

هذه قضية متقطعة: عادة FSDeleteObject استدعاء يعمل بشكل جيد فقط. في تلك الحالات التي أحصل فيها على رمز الخطأ، أود حذف الملف بأمان "في وقت لاحق في الوقت المناسب" عندما يتم إنهاء نظام التشغيل عند اللعب به.

ما هو أفضل مسار للعمل في محاولة حذف هذا الملف المؤقت المزعج؟

هل كانت مفيدة؟

المحلول

هنا ماذا يحدث:

  1. السبب الأكثر شيوعا لل FSDeleteObject فشل مؤقتا مع fBsyErr هو أن الأضواء في عملية فهرسة الملف. إذا قمت بتعديل ملف، فاقم بإغلاقه، ثم حاول على الفور حذفه باستخدام FSDeleteObject, ، من الممكن تماما أن يكون مفهرس الأضواء مفتوحا وستحصل عليه fBsyErr.
  2. بعض ماسحات ضوئية لمكافحة الفيروسات ثالث يمكن أن تؤدي هذه المشكلة أيضا. عند إغلاق ملف معدلة، يبدأ الماسح الضوئي لمكافحة الفيروسات على الفور في التحقق من ذلك للفيروسات. إذا كان لا يزال يتحقق عند محاولة حذف الملف، FSDeleteObject سوف تفشل مع fBsyErr.

كل مشكلة لديها سلسلة من الحلول، الأفضل لكليهما هو استخدام unlink

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top