Läs korrupta PST/OST-filer

Hantera korrupta lagringsfiler

Ibland kan det vara omöjligt att läsa en PST/OST på grund av vissa problem. Till exempel kan vissa datablokkar vara korrupta. I sådana fall uppstår vanligtvis undantag när man anropar EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, osv. metoder. Men enskilda meddelanden eller mappar kan förbli oskadade i lagringen.

Metoder för att hitta objektidentifierare

Följande metoder möjliggör att hitta objektidentifierare på ett hierarkiskt sätt.

Identifierare som erhålls med hjälp av metoderna kan användas för att hämta meddelanden och mappar.

OBS: Det bör noteras att trots dess fördelar finns det korrupta lagringar som inte kan läsas ens med dessa metoder.

Traversering av PST-filer

Följande kodexempel visar hur man traverserar PST-filen och extraherar mappar och meddelanden. För att få listan med identifierare använder du metoderna FindMessages och FindSubfolders. Därefter skickas identifieraren till ExtractMessage eller GetFolderById metod för att extrahera element.

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