Como lidar com exceções do núcleo PSD em .NET

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 build

Etapa 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.

Ver também

 Português