Beschadigde PST/OST‑bestanden lezen
Omgaan met corrupte opslagbestanden
Soms is het niet mogelijk een PST/OST te lezen vanwege bepaalde problemen. Bijvoorbeeld kunnen sommige gegevensblokken corrupt zijn. In dergelijke gevallen ontstaan er meestal uitzonderingen bij het aanroepen van de EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, enz. methoden. Maar individuele berichten of mappen kunnen onbeschadigd blijven in de opslag.
Methoden om itemidentifiers te vinden
De volgende methoden maken het mogelijk om itemidentifiers hiërarchisch te vinden.
- FindMessages(string parentEntryId) - zoekt de identificatoren van berichten voor de map.
- FindSubfolders(string parentEntryId) - zoekt de identificatoren van submappen voor de map.
Identifiers die met behulp van de methoden verkregen zijn, kunnen worden gebruikt om berichten en mappen op te halen.
OPMERKING: Het moet worden opgemerkt dat ondanks de voordelen er corrupte opslagplaatsen bestaan die zelfs met deze methoden niet kunnen worden gelezen.
PST‑bestand doorlopen
Het volgende codevoorbeeld toont het doorlopen van een PST‑bestand en het extraheren van mappen en berichten. Gebruik de FindMessages‑ en FindSubfolders‑methoden om de lijst met identifiers te krijgen. Vervolgens wordt de identifier doorgegeven aan de ExtractMessage of GetFolderById methode om elementen te extraheren.
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);
}
}
}