كيفية معالجة استثناءات PSD Core في .NET
Aspose.PSD FOSS لـ .NET يعرّف نوعين من الاستثناءات: PsdLoadException، يُرمى أثناء تحليل مستند PSD/PSB، وPsdSaveException، يُرمى أثناء كتابة أحدهما. كلاهما مشتق من System.Exception ويدعم مُنشئًا يقتصر على الرسالة ومُنشئًا يضم الرسالة والاستثناء الداخلي.
دليل خطوة بخطوة
الخطوة 1: تثبيت الحزمة
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildالخطوة 2: استيراد الفئات المطلوبة
using Aspose.PSD.FileFormats.Psd;الخطوة 3: التقاط الأخطاء أثناء التحميل
PsdLoadException يُرمى عندما يفشل هيكل المستند في التحقق — على سبيل المثال، نسخة PSD/PSB غير مدعومة، طول قسم يتجاوز الحد المعلن للقسم المحيط، أو بيانات تدفق مقطوعة:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}الخطوة 4: التقاط أخطاء وقت الحفظ
PsdSaveException يُرمى أثناء كتابة مستند — على سبيل المثال، عندما تتجاوز قيمة السلسلة الطول الذي يمكن لحقل سلسلة باسكال في PSD تحمله:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}الخطوة 5: فحص الاستثناء الداخلي
كلا نوعي الاستثناء لهما مُنشئ يغلف استثناءً داخليًا (يُستخدم داخليًا، على سبيل المثال، عندما يقطع خطأ I/O قراءة هيكل الملف). تحقق من InnerException للسبب الأساسي:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}المشكلات الشائعة والحلول
PsdLoadException مع رسالة حول إصدار غير مدعوم. حقل إصدار PSD المعلن في الملف ليس إما PSD القياسي ولا قيمة PSB للوثائق الكبيرة. تأكد من أن الملف هو مستند PSD/PSB أصلي غير تالف.
PsdLoadException مع رسالة حول تجاوز طول القسم للحدود. حقول الطول الداخلية للملف غير متسقة مع حجمه الفعلي — هذا عادةً ما يشير إلى ملف مقطّع أو تالف بدلاً من نسخة غير مدعومة.
PsdSaveException حول طول سلسلة باسكال. قيمة النص (مثل اسم الطبقة أو اسم المورد) تتجاوز 255 بايت، وهو الحد الأقصى الذي يمكن لحقل سلسلة باسكال في PSD تشفيره. قُم بتقصير القيمة قبل الحفظ.
الأسئلة المتكررة
هل PsdLoadException و PsdSaveException تشتركان في نوع استثناء أساسي مشترك؟
لا — كلاهما يشتق مباشرةً من System.Exception، وليس من بعضهما البعض أو من فئة استثناء أساسية مشتركة Aspose.PSD.
هل يمكن أن يحدث PsdSaveException لأسباب غير طول السلسلة؟
موقع الإلقاء المؤكد في هذا البناء المفتوح المصدر هو فحص طول سلسلة باسكال. فشل عمليات الإدخال/الإخراج الأخرى أثناء الحفظ (مثلاً، تدفق الوجهة غير القابل للكتابة) يظهر كنوع الاستثناء الأساسي .NET بدلاً من أن يُغلف في PsdSaveException.
هل سيتسبب التقاط Exception أيضًا في التقاط هذين النوعين؟
نعم، بما أن كلاهما مشتقان من System.Exception — لكن التقاط الأنواع المحددة يتيح لك التمييز بين فشل التحميل وفشل الحفظ.