如何在 .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 — 但捕获具体的类型可以让你区分加载失败和保存失败。