Jak řešit výjimky PSD Core v .NET
Aspose.PSD FOSS pro .NET definuje dva typy výjimek: PsdLoadException, vyvolaná při parsování dokumentu PSD/PSB, a PsdSaveException, vyvolaná při jeho zápisu. Obě dědí z System.Exception a podporují konstruktor pouze se zprávou a konstruktor se zprávou a vnitřní výjimkou.
Průvodce krok za krokem
Krok 1: Nainstalujte balíček
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildKrok 2: Importujte požadované třídy
using Aspose.PSD.FileFormats.Psd;Krok 3: Zachyťte selhání při načítání
PsdLoadException je vyvolán, když struktura dokumentu neprojde validací — například nepodporovaná PSD/PSB verze, délka sekce překračuje deklarovanou hranici nadřazené sekce, nebo jsou data proudu zkrácena:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}Krok 4: Zachyťte selhání během ukládání
PsdSaveException je vyvolán při zápisu dokumentu — například když řetězcová hodnota překročí délku, kterou může pole PSD Pascal string pojmout:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}Krok 5: Prozkoumejte vnitřní výjimku
Oba typy výjimek mají konstruktor, který zabaluje vnitřní výjimku (používá se interně, například když I/O chyba přeruší čtení struktury souboru). Zkontrolujte InnerException pro základní příčinu:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}Časté problémy a opravy
PsdLoadException s zprávou o nepodporované verzi. Pole deklarované verze PSD v souboru není ani standardní PSD, ani hodnota pro velký dokument PSB. Ověřte, že soubor je pravý, nepoškozený dokument PSD/PSB.
PsdLoadException s zprávou o délce sekce překračující hranici. Interní pole délky v souboru nesouhlasí s její skutečnou velikostí— to obvykle naznačuje oříznutý nebo poškozený soubor, nikoli nepodporovanou variantu.
PsdSaveException o délce Pascalova řetězce. Hodnota řetězce (např. název vrstvy nebo zdroje) překračuje 255byteů, maximální kapacitu pole Pascalova řetězce v PSD. Zkrátit hodnotu před uložením.
Často kladené otázky
Mají PsdLoadException a PsdSaveException společný základní typ výjimky?
Ne— oba dědí přímo z System.Exception, nikoli jeden od druhého ani ze sdílené základní třídy výjimek Aspose.PSD.
Může se PsdSaveException objevit zdůvodů jiných než dlouhá hodnota řetězce?
Potvrzené místo vyhození vtéto FOSS verzi je kontrola délky Pascalova řetězce. Ostatní selhání I/O během ukládání (například cílový proud, do kterého nelze zapisovat) se projeví jako podkladový typ výjimky .NET místo toho, aby byly zabaleny do PsdSaveException.
Zachytí zachycení Exception také tyto dva typy?
Ano, protože oba jsou odvozeny od System.Exception — ale zachycení konkrétních typů vám umožní rozlišovat selhání načítání od selhání ukládání.