PSD Core 예외를 .NET에서 처리하는 방법
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 빌드에서 확인된 throw 지점은 Pascal 문자열 길이 검사입니다. 다른 저장 시 I/O 실패(예: 쓸 수 없는 대상 스트림)는 PsdSaveException으로 래핑되지 않고 기본 .NET 예외 유형으로 나타납니다.
Exception을(를) 캐치하면 이 두 유형도 잡히게 됩니까?
네, 두 경우 모두 System.Exception에서 파생되지만 — 특정 유형을 포착하면 로드 실패와 저장 실패를 구분할 수 있습니다.