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