Jak obsługiwać wyjątki PSD Core w .NET

Jak obsługiwać wyjątki PSD Core w .NET

Aspose.PSD FOSS dla .NET definiuje dwa typy wyjątków: PsdLoadException, zgłaszany podczas parsowania dokumentu PSD/PSB, oraz PsdSaveException, zgłaszany podczas zapisywania takiego dokumentu. Oba dziedziczą po System.Exception i obsługują konstruktor tylko z komunikatem oraz konstruktor z komunikatem i wewnętrznym wyjątkiem.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

Krok 2: Zaimportuj wymagane klasy

using Aspose.PSD.FileFormats.Psd;

Krok 3: Przechwyć błędy ładowania

PsdLoadException jest zgłaszany, gdy struktura dokumentu nie przechodzi walidacji — na przykład nieobsługiwana wersja PSD/PSB, długość sekcji przekracza zadeklarowaną granicę sekcji nadrzędnej lub dane strumienia są ucięte:

try
{
    using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
    Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}

Krok 4: Przechwyć błędy w czasie zapisu

PsdSaveException jest zgłaszany podczas zapisywania dokumentu — na przykład, gdy wartość łańcucha przekracza długość, jaką może pomieścić pole łańcucha Pascal w formacie PSD:

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

Krok 5: Zbadaj wewnętrzny wyjątek

Oba typy wyjątków posiadają konstruktor, który opakowuje wewnętrzny wyjątek (używany wewnętrznie, na przykład gdy błąd I/O przerywa odczyt struktury pliku). Sprawdź InnerException, aby poznać przyczynę podstawową:

try
{
    using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
    Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}

Typowe problemy i rozwiązania

PsdLoadException z komunikatem o nieobsługiwanej wersji. Pole wersji PSD zadeklarowane w pliku nie jest ani standardową wartością PSD, ani wartością PSB dla dużych dokumentów. Potwierdź, że plik jest autentycznym, nieuszkodzonym dokumentem PSD/PSB.

PsdLoadException z komunikatem o przekroczeniu dopuszczalnej długości sekcji. Wewnętrzne pola długości w pliku są niezgodne z jego faktycznym rozmiarem — zazwyczaj wskazuje to na ucięty lub uszkodzony plik, a nie na nieobsługiwaną wersję.

PsdSaveException dotyczącej długości łańcucha Pascal. Wartość łańcucha (np. nazwa warstwy lub zasobu) przekracza 255 bajtów, co jest maksymalnym rozmiarem, jaki może zakodować pole łańcucha Pascal w PSD. Skróć wartość przed zapisaniem.

Najczęściej zadawane pytania

Czy PsdLoadException i PsdSaveException dzielą wspólny bazowy typ wyjątku?

Nie — oba dziedziczą bezpośrednio po System.Exception, nie od siebie nawzajem ani od wspólnej klasy bazowej wyjątku Aspose.PSD.

Czy PsdSaveException może wystąpić z przyczyn innych niż długi ciąg znaków?

Potwierdzonym miejscem rzutu w tej wersji FOSS jest sprawdzenie długości łańcucha Pascal. Inne błędy I/O podczas zapisu (na przykład strumień docelowy, do którego nie można zapisać) pojawiają się jako podstawowy typ wyjątku .NET, a nie są opakowywane w PsdSaveException.

Czy przechwycenie Exception będzie również przechwytywać te dwa typy?

Tak, ponieważ oba dziedziczą po System.Exception — ale wykrywanie konkretnych typów pozwala odróżnić niepowodzenia ładowania od niepowodzeń zapisu.

Zobacz także

 Polski