Як обробляти виключення ядра PSD у .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 генерується під час запису документа — наприклад, коли значення рядка перевищує довжину, яку може вмістити поле Pascal-рядка PSD:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}Крок 5: Перевірити внутрішнє виключення
Обидва типи виключень мають конструктор, який обгортає внутрішнє виключення (використовується внутрішньо, наприклад, коли помилка вводу/виводу перериває читання структури файлу). Перевірте 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 про довжину рядка Pascal. Значення рядка (наприклад, назва шару або ресурсу) перевищує 255 байт, максимальну довжину, яку може кодувати поле Pascal у PSD. Скоротіть значення перед збереженням.
Поширені запитання
Чи PsdLoadException і PsdSaveException мають спільний базовий тип виключення?
Ні — обидва успадковуються безпосередньо від System.Exception, а не один від одного чи від спільного базового класу виключень Aspose.PSD.
Чи може PsdSaveException виникнути з причин, відмінних від довгого рядкового значення?
Підтверджене місце викидання в цій збірці FOSS — перевірка довжини Pascal-рядка. Інші помилки вводу/виводу під час збереження (наприклад, потік призначення, у який не можна записати) проявляються як базовий тип виключення .NET, а не обгортаються в PsdSaveException.
Чи буде перехоплення Exception також ловити ці два типи?
Так, оскільки обидва успадковуються від System.Exception — але визначення конкретних типів дозволяє розрізняти помилки завантаження від помилок збереження.