קריאת קבצי PST/OST פגומים
טיפול בקבצי אחסון פגומים
לעיתים לא יהיה אפשרי לקרוא קובץ PST/OST עקב כמה בעיות. לדוגמה, חלקי נתונים עשויים להיות פגומים. במקרים כאלה, יוצאות חריגות בדרך כלל כשמקוראים את EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, וכו׳. עם זאת, הודעות או תיקיות בודדות עשויות להישאר שלמות באחסון.
מתודות למציאת מזהי הפריטים
המתודות הבאות מאפשרות למצוא מזהי פריטים באופן היררכי.
- FindMessages(string parentEntryId) - מוצא את המזהים של הודעות עבור התיקייה.
- FindSubfolders(string parentEntryId) - מוצא את המזהים של תת‑תיקיות עבור התיקייה.
המזהים שהושגו באמצעות המתודות ניתנים לשימוש לקבלת הודעות ותיקיות.
הערה: יש לציין שלמרות היתרונות שלו, קיימים אחסונים פגומים שלא ניתן לקרוא גם בעזרת שיטות אלה.
חיפוש בקובץ 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);
}
}
}