خواندن فایل‌های 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);
        }
    }
}