Cách Xử Lý Ngoại Lệ PSD Core Trong .NET

Cách Xử Lý Ngoại Lệ PSD Core Trong .NET

Aspose.PSD FOSS cho .NET định nghĩa hai loại ngoại lệ: PsdLoadException, được ném khi phân tích một tài liệu PSD/PSB, và PsdSaveException, được ném khi ghi một tài liệu. Cả hai đều kế thừa từ System.Exception và hỗ trợ một hàm khởi tạo chỉ có thông điệp và một hàm khởi tạo có thông điệp cộng với ngoại lệ bên trong.

Hướng dẫn từng bước

Bước 1: Cài đặt gói

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

Bước 2: Nhập các lớp cần thiết

using Aspose.PSD.FileFormats.Psd;

Bước 3: Bắt các lỗi thời gian tải

PsdLoadException được ném ra khi cấu trúc tài liệu không vượt qua việc kiểm tra — ví dụ, phiên bản PSD/PSB không được hỗ trợ, độ dài phần vượt quá giới hạn đã khai báo của phần bao quanh, hoặc dữ liệu luồng bị cắt ngắn:

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

Bước 4: Bắt các lỗi thời gian lưu

PsdSaveException được ném ra khi ghi tài liệu — ví dụ, khi giá trị chuỗi vượt quá độ dài mà trường chuỗi Pascal PSD có thể chứa:

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

Bước 5: Kiểm tra ngoại lệ bên trong

Cả hai loại ngoại lệ đều có một hàm khởi tạo bao bọc một ngoại lệ bên trong (được sử dụng nội bộ, ví dụ, khi lỗi I/O làm gián đoạn việc đọc cấu trúc tệp). Kiểm tra InnerException để tìm nguyên nhân gốc:

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

Các vấn đề thường gặp và cách khắc phục

PsdLoadException với một thông báo về phiên bản không được hỗ trợ. Trường phiên bản PSD được khai báo trong tệp không phải là giá trị PSD tiêu chuẩn cũng không phải là giá trị PSB cho tài liệu lớn. Xác nhận tệp là tài liệu PSD/PSB thật, không bị hỏng.

PsdLoadException với một thông báo về độ dài phần vượt quá ranh giới. Các trường độ dài nội bộ của tệp không khớp với kích thước thực tế — điều này thường cho thấy tệp bị cắt ngắn hoặc hỏng hơn là một biến thể không được hỗ trợ.

PsdSaveException về độ dài chuỗi Pascal. Giá trị chuỗi (chẳng hạn như tên lớp hoặc tài nguyên) vượt quá 255 byte, giới hạn tối đa mà trường chuỗi Pascal của PSD có thể mã hoá. Rút ngắn giá trị trước khi lưu.

Câu hỏi thường gặp

Liệu PsdLoadException và PsdSaveException có chia sẻ một kiểu ngoại lệ cơ sở chung không?

Không — cả hai đều kế thừa trực tiếp từ System.Exception, không phải từ nhau hoặc từ một lớp ngoại lệ cơ sở Aspose.PSD chung.

Liệu PsdSaveException có thể xảy ra vì các lý do khác ngoài giá trị chuỗi dài không?

Vị trí ném đã được xác nhận trong bản dựng FOSS này là kiểm tra độ dài chuỗi Pascal. Các lỗi I/O khác khi lưu (ví dụ, luồng đích không thể ghi) xuất hiện dưới dạng loại ngoại lệ .NET cơ bản thay vì được bọc trong PsdSaveException.

Việc bắt Exception có cũng bắt được hai kiểu này không?

Đúng, vì cả hai đều kế thừa từ System.Exception — nhưng việc bắt các loại cụ thể cho phép bạn phân biệt lỗi tải với lỗi lưu.

Xem thêm

 Tiếng Việt