استثناهای اصلی
استثناهای اصلی
کتابخانه خطاهای بارگذاری و ذخیرهسازی را از طریق دو نوع استثنای اختصاصی گزارش میدهد: PsdLoadException و PsdSaveException، که هر دو از کلاس استاندارد Exception ارثبری میکنند.
PsdLoadException
در صورتی که Image.Load() / PsdImage.Load() نتواند ورودی را به عنوان یک سند معتبر PSD یا PSB تجزیه کند، این استثنا رخ میدهد.
try
{
using var image = (PsdImage)Image.Load(inputPath);
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load {inputPath}: {ex.Message}");
}PsdSaveException
اگر PsdImage.Save() نتواند سند را بنویسد، این استثنا ایجاد میشود.
try
{
image.Save(outputPath);
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save {outputPath}: {ex.Message}");
}سازندگان
هر دو نوع استثنا دارای ساختار دو سازندهٔ مشابه هستند: یک سازندهٔ فقط با پیام، و یک سازندهٔ ترکیبی پیام-بهعلاوه-استثنای داخلی برای بستهبندی خطای سطح پایینتر.
throw new PsdLoadException("Unexpected end of stream while reading the PSD header.");
throw new PsdSaveException("Failed to write layer data.", innerException);نکات و بهترین شیوهها
- در اطراف هر فراخوانی
Image.Load()/PsdImage.Load()که ورودی خارجی را پردازش میکند،PsdLoadExceptionرا بگیرید. - اگر مقصد (دیسک، جریان) ممکن است قابل نوشتن نباشد، در اطراف هر فراخوانی
PsdImage.Save()،PsdSaveExceptionرا بگیرید. - هر دو نوع از
Exceptionارث میبرند، بنابراین یکcatch (Exception)عمومیتر نیز آنها را میگیرد — وقتی میخواهید شکستهای بارگذاری را از شکستهای ذخیرهسازی متمایز کنید، نوعهای خاص را ترجیح دهید.
مسائل رایج
| مشکل | دلیل | راهحل |
|---|---|---|
PsdLoadException روی فایلی که در ابزارهای دیگر بهدرستی باز میشود | ورودی یک سند PSD/PSB معتبر نیست، یا از ویژگیای استفاده میکند که تجزیهکننده این نسخهٔ متنباز آن را تشخیص نمیدهد | تأیید کنید که فایل یک سند واقعی PSD/PSB است؛ ویژگیهای پشتیبانینشده را جدا از خطاهای بارگذاری گزارش دهید |
PsdSaveException هنگام نوشتن به یک جریان | ممکن است جریان مقصد قابل نوشتن نباشد یا قبلاً از بین رفته باشد | پیش از فراخوانی Save()، تأیید کنید که جریان باز و قابل نوشتن است |
FAQ
آیا این کتابخانه پس از شکست بارگذاری یا ذخیرهسازی بهصورت خودکار دوباره تلاش میکند؟
خیر. PsdLoadException و PsdSaveException یکبار پرتاب میشوند و باید توسط فراخواننده مدیریت شوند؛ هیچ تلاش خودکار دیگری وجود ندارد.
آیا میتوانم علت اصلی یک استثنای بستهبندیشده را بررسی کنم؟
بله، وقتی یکی ارائه شود — هر دو سازنده یک پارامتر innerException را میپذیرند که از طریق ویژگی استاندارد Exception.InnerException قابل دسترسی است.
API Reference خلاصه
| کلاس/متد | توضیح |
|---|---|
PsdLoadException(message) / PsdLoadException(message, innerException) | زمانی که سندی قابل بارگذاری نباشد، این استثنا پرتاب میشود |
PsdSaveException(message) / PsdSaveException(message, innerException) | در صورتی که سند نتواند ذخیره شود، پرتاب میشود |