Основные исключения

Основные исключения

Основные исключения

Библиотека сообщает о неудачах загрузки и сохранения с помощью двух специальных типов исключений: 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);

Советы и лучшие практики

  • Отлавливайте PsdLoadException вокруг каждого вызова Image.Load()/PsdImage.Load(), который обрабатывает внешние данные.
  • Отлавливайте PsdSaveException вокруг каждого вызова PsdImage.Save(), если назначение (диск, поток) может быть недоступно для записи.
  • Оба типа наследуют Exception, поэтому более общее catch (Exception) также их отлавливает — предпочтительно использовать конкретные типы, когда нужно различать ошибки загрузки и сохранения.

Распространённые проблемы

ПроблемаПричинаИсправление
PsdLoadException на файле, который открывается без проблем в других инструментахВвод не является действительным документом PSD/PSB или использует функцию, которую парсер этой FOSS-версии не распознаётУбедитесь, что файл является подлинным документом PSD/PSB; сообщайте о неподдерживаемых функциях отдельно от ошибок загрузки
PsdSaveException при записи в потокПоток назначения может быть недоступен для записи или уже был освобождёнУбедитесь, что поток открыт и доступен для записи, перед вызовом Save()

FAQ

Автоматически ли эта библиотека повторяет попытку после ошибки загрузки или сохранения?

Нет. PsdLoadException и PsdSaveException генерируются один раз и должны быть обработаны вызывающим кодом; автоматический повтор не предусмотрен.

Могу ли я проверить оригинальную причину обёрнутого исключения?

Да, когда он предоставлен — оба конструктора принимают параметр innerException, доступный через стандартное свойство Exception.InnerException.


API Reference Сводка

Класс/МетодОписание:
PsdLoadException(message) / PsdLoadException(message, innerException)Выбрасывается, когда документ не может быть загружен
PsdSaveException(message) / PsdSaveException(message, innerException)Выбрасывается, когда документ не может быть сохранён

См. также:

 Русский