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.
- FindMessages(string parentEntryId) - hittar identifierarna för meddelanden för mappen.
- FindSubfolders(string parentEntryId) - hittar identifierarna för undermappar för mappen.
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);
}
}
}