如何在 .NET 中处理 PSD Core 异常

如何在 .NET 中处理 PSD Core 异常

Aspose.PSD FOSS for .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 会在写入文档时抛出 — 例如,当字符串值超出 PSD Pascal 字符串字段能够容纳的长度时:

try
{
    image.Save("output.psd");
}
catch (PsdSaveException ex)
{
    Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}

步骤 5:检查内部异常

这两种异常类型都有一个包装内部异常的构造函数(内部使用,例如,当 I/O 错误中断文件结构读取时)。检查 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 字节,这是 PSD Pascal 字符串字段能够编码的最大长度。请在保存前缩短该值。

常见问题

PsdLoadException 和 PsdSaveException 是否共享同一个基础异常类型?

不——两者都直接派生自 System.Exception,而不是相互派生或共享的 Aspose.PSD 基础异常类。

除了字符串过长之外,PsdSaveException 还能因其他原因出现吗?

在此 FOSS 构建中,已确认的抛出位置是 Pascal 字符串长度检查。其他保存时的 I/O 失败(例如,目标流不可写)会以底层的 .NET 异常类型出现,而不是被包装在 PsdSaveException 中。

捕获 Exception 是否也会捕获这两种类型?

是的,因为两者都源自 System.Exception — 但捕获具体的类型可以让你区分加载失败和保存失败。

另请参阅

 中文