سؤال

الشرط: عند وجود خطأ (استثناء ألقيت)، يجب نقل الملف الذي تتم معالجته إلى المجلد للملفات مع الأخطاء (APP.CONFIG الإعداد).

المشكلة: الطريقة الوحيدة التي يمكنني من خلالها التعامل مع هذا هو الحصول على تجربة / صيد متداخلة داخل المحاولة الرئيسية / اللحاق بمحاولة نقل الملف، بهذه الطريقة إذا فشلت الحركة، يتم طرح استثناء آخر. أعلم أنني أستطيع أن أبذل قصارى جهدي للتأكد من أن الدليل موجود، وترد الحقوق، ولكن نظرا لأنها محرك أقراص الشبكة ... أنا أعرف أن يحدث خطأ في مرحلة ما.

مثال

Try
   (Do Some Logic, but an error happens)
Catch ex As Exception
   Try
       (Attempt to move file)
   Catch exinner as Exception
       Throw New Exception("Cannot move file to Error Directory", innerex)
   End Try
   (Raise Error Event for logging by form/batch app)
End Try

في الواقع الذي خرج أكثر فظيعة من ما كنت أفكر به سيبدو.

الآن أعرف أنني أفعل شيئا خطأ. كيف يجب أن أحاول حقا التعامل مع وجود خطأ محتمل في Catch، بحيث لا يزال بإمكاني نقل الملفات وحاول استدعاء الحدث الخاص بي؟

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

المحلول

أن كل شيء يبدو جيدا بالنسبة لي. من المعقول تماما أن تحاول قبض على كتل داخل الصيد. يمكنك التحقق من كل الأشياء التي ذكرتها ولكن هناك دائما احتمال أن تنخفض الشبكة أو أنك لن تتمكن فقط من كتابة هذا الملف. ما تفعله بعد ذلك متروك لك. يبدو رسالة خطأ ومعالجة مؤقتة معقولة.

نصائح أخرى

هذا هو بالضبط كيف يمكنك أن تفعل ذلك عند استخدام الاستثناءات فقط. قد تفكر في استخدام الأعلام، ولكنها ليست أفضل إما:

(Set file processing error flag to false)
Try
   (Do Some Logic, but an error happens)
Catch ex As Exception
   (Set file processing error flag to true)
End Try

IF (file processing error flag = true)
   Try
       (Attempt to move file)
   Catch exinner as Exception
       Throw New Exception("Cannot move file to Error Directory", innerex)
   End Try
   (Raise Error Event for logging by form/batch app)
End Try

ليس هذا أفضل بكثير ...

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