קריאת קבצי PST/OST פגומים

טיפול בקבצי אחסון פגומים

לעיתים לא יהיה אפשרי לקרוא קובץ PST/OST עקב כמה בעיות. לדוגמה, חלקי נתונים עשויים להיות פגומים. במקרים כאלה, יוצאות חריגות בדרך כלל כשמקוראים את EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, וכו׳. עם זאת, הודעות או תיקיות בודדות עשויות להישאר שלמות באחסון.

מתודות למציאת מזהי הפריטים

המתודות הבאות מאפשרות למצוא מזהי פריטים באופן היררכי.

המזהים שהושגו באמצעות המתודות ניתנים לשימוש לקבלת הודעות ותיקיות.

הערה: יש לציין שלמרות היתרונות שלו, קיימים אחסונים פגומים שלא ניתן לקרוא גם בעזרת שיטות אלה.

חיפוש בקובץ PST

דוגמת הקוד הבאה מציגה חיפוש בקובץ PST וחילוץ תיקיות והודעות. כדי לקבל את רשימת המזהים, השתמש במתודות FindMessages ו‑FindSubfolders. לאחר מכן המזהה נשלח ל‑ ExtractMessage או GetFolderById שיטה לחילוץ אלמנטים.

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);
        }
    }
}