Đọc Các Tệp PST/OST Bị Hỏng

Xử lý Các Tệp Lưu trữ Bị Hỏng

Đôi khi có thể không đọc được PST/OST do một số vấn đề. Ví dụ, một số khối dữ liệu có thể bị hỏng. Trong những trường hợp như vậy, thường sẽ xảy ra ngoại lệ khi gọi EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, v.v. các phương thức. Tuy nhiên, các tin nhắn hoặc thư mục riêng lẻ có thể vẫn không bị hỏng trong kho lưu trữ.

Phương thức để Tìm Định danh Mục

Các phương thức sau cho phép tìm các định danh mục theo cách phân cấp.

Các định danh lấy được bằng các phương thức có thể được sử dụng để lấy tin nhắn và thư mục.

LƯU Ý: Cần lưu ý rằng mặc dù có ưu điểm, vẫn có các kho lưu trữ bị hỏng mà không thể đọc được ngay cả khi sử dụng các phương pháp này.

Duyệt Tệp PST

Đoạn mã mẫu sau đây cho thấy việc duyệt tệp PST và trích xuất các thư mục và tin nhắn. Để lấy danh sách các định danh, sử dụng các phương thức FindMessages và FindSubfolders. Sau đó, định danh được truyền vào ExtractMessage hoặc GetFolderById phương thức để trích xuất các phần tử.

using (var pst = PersonalStorage.FromFile(fileName))
{
    ExploreCorruptedPst(pst, pst.RootFolder.EntryIdString);
}

public static void ExploreCorruptedPst(PersonalStorage pst, string rootFolderId)
{
    var messageIdList = pst.FindMessages(rootFolderId);

    foreach (var messageId in messageIdList)
    {
        try
        {
            var msg = pst.ExtractMessage(messageId);
            Console.WriteLine( "- " + msg.Subject);
        }
        catch
        {
            Console.WriteLine("Message reading error. Entry id: " + messageId);
        }
    }

    var folderIdList = pst.FindSubfolders(rootFolderId);

    foreach (var subFolderId in folderIdList)
    {
        if (subFolderId != rootFolderId)
        {
            try
            {
                FolderInfo subfolder = pst.GetFolderById(subFolderId);
                Console.WriteLine(subfolder.DisplayName);
            }
            catch
            {
                Console.WriteLine("Message reading error. Entry id: " + subFolderId);
            }

            ExplodeCorruptedPst(pst, subFolderId);
        }
    }
}