Como lidar com exceções do núcleo PSD em .NET
Aspose.PSD FOSS para .NET define dois tipos de exceção: PsdLoadException, lançada ao analisar um documento PSD/PSB, e PsdSaveException, lançada ao gravá-lo. Ambas derivam de System.Exception e suportam um construtor apenas com mensagem e um construtor com mensagem e exceção interna.
Guia passo a passo
Etapa 1: Instalar o pacote
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildEtapa 2: Importar as classes necessárias
using Aspose.PSD.FileFormats.Psd;Etapa 3: Capturar falhas no tempo de carregamento
PsdLoadException é lançada quando a estrutura de um documento falha na validação — por exemplo, uma versão PSD/PSB não suportada, um comprimento de seção que excede o limite declarado da seção que a contém, ou dados de fluxo truncados:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}Etapa 4: Capturar falhas de salvamento
PsdSaveException é lançada ao gravar um documento — por exemplo, quando o valor de uma string excede o comprimento que um campo de string Pascal do PSD pode armazenar:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}Etapa 5: Inspecionar uma exceção interna
Ambos os tipos de exceção possuem um construtor que encapsula uma exceção interna (usado internamente, por exemplo, quando um erro de E/S interrompe a leitura da estrutura do arquivo). Verifique InnerException para a causa subjacente:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}Problemas comuns e correções
PsdLoadException com uma mensagem sobre uma versão não suportada. O campo de versão PSD declarado no arquivo não é nem o PSD padrão nem o valor PSB de documento grande. Confirme que o arquivo é um documento PSD/PSB genuíno e não corrompido.
PsdLoadException com uma mensagem sobre um comprimento de seção que excede um limite. Os campos de comprimento interno do arquivo são inconsistentes com seu tamanho real — isso geralmente indica um arquivo truncado ou corrompido, e não uma variante não suportada.
PsdSaveException sobre o comprimento de uma string Pascal. Um valor de string (como o nome de uma camada ou recurso) excede 255 bytes, o máximo que um campo de string Pascal do PSD pode codificar. Reduza o valor antes de salvar.
Perguntas Frequentes
Os PsdLoadException e PsdSaveException compartilham um tipo de exceção base comum?
Não — ambos derivam diretamente de System.Exception, não um do outro ou de uma classe de exceção base Aspose.PSD compartilhada.
Pode PsdSaveException ocorrer por razões diferentes de um valor de string longo?
O ponto de lançamento confirmado nesta compilação FOSS é a verificação do comprimento da string Pascal. Outras falhas de E/S no momento da gravação (por exemplo, um fluxo de destino que não pode ser escrito) aparecem como o tipo de exceção subjacente .NET em vez de serem encapsuladas em PsdSaveException.
Capturar Exception também capturará esses dois tipos?
Sim, já que ambos derivam de System.Exception — mas capturar os tipos específicos permite distinguir falhas de carregamento de falhas de salvamento.