چگونه استثناهای 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مرحله ۲: وارد کردن کلاسهای مورد نیاز
using Aspose.PSD.FileFormats.Psd;مرحله ۳: دستگیری از خطاهای زمان بارگذاری
PsdLoadException زمانی که ساختار سند اعتبارسنجی نمیشود، به استثنا تبدیل میگردد — برای مثال، نسخهٔ PSD/PSB پشتیبانینشده، طول بخشی که از مرز اعلامشدهٔ بخش والد فراتر میرود، یا دادهٔ جریان قطعشده:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}مرحله ۴: گرفتن خطاهای زمان ذخیرهسازی
PsdSaveException در هنگام نوشتن سند به استثنا تبدیل میشود — برای مثال، وقتی مقدار رشتهای بیش از طول مجاز فیلد رشتهٔ پاسکال PSD باشد:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}مرحله ۵: بررسی استثنای داخلی
هر دو نوع استثنا سازندهای دارند که یک استثنای داخلی را میپیچند (بهصورت داخلی استفاده میشود، برای مثال وقتی خطای 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 دربارهٔ طول رشتهٔ پاسکال. یک مقدار رشتهای (مانند نام لایه یا منبع) بیش از ۲۵۵ بایت است، که حداکثر مقدار قابل رمزگذاری توسط فیلد رشتهٔ پاسکال PSD میباشد. قبل از ذخیرهسازی مقدار را کوتاه کنید.
سوالات متداول
آیا PsdLoadException و PsdSaveException یک نوع استثنای پایه مشترک دارند؟
نه — هر دو مستقیماً از System.Exception ارث میبرند، نه از یکدیگر یا یک کلاس استثنای پایه مشترک Aspose.PSD.
آیا PsdSaveException میتواند به دلایل دیگری به جز مقدار طولانی رشته رخ دهد؟
محل پرتاب تأیید شده در این ساختار FOSS، بررسی طول رشته پاسکال است. سایر خطاهای ورودی/خروجی هنگام ذخیرهسازی (به عنوان مثال، جریان مقصدی که قابل نوشتن نیست) بهعنوان نوع استثنای پایه .NET ظاهر میشوند و در PsdSaveException بسته نمیشوند.
آیا گرفتن Exception نیز این دو نوع را میگیرد؟
بله، چون هر دو از System.Exception مشتق میشوند — اما تشخیص انواع خاص به شما امکان میدهد که شکستهای بارگذاری را از شکستهای ذخیرهسازی متمایز کنید.