Bozuk PST/OST Dosyalarını Okuyun
Bozuk Depolama Dosyalarının İşlenmesi
Bazen bazı sorunlar nedeniyle bir PST/OST dosyasını okumak mümkün olmayabilir. Örneğin, bazı veri blokları bozuk olabilir. Böyle durumlarda, genellikle şu yöntem çağrıldığında istisnalar ortaya çıkar: EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, vb. yöntemler. Ancak bireysel mesajlar veya klasörler depolamada zarar görmemiş olabilir.
Öğe Tanımlayıcılarını Bulma Yöntemleri
Aşağıdaki yöntemler, öğe tanımlayıcılarını hiyerarşik bir şekilde bulmanıza olanak tanır.
- FindMessages(string parentEntryId) - klasör için mesaj kimliklerini bulur.
- FindSubfolders(string parentEntryId) - klasör için alt klasör kimliklerini bulur.
Yöntemlerle elde edilen tanımlayıcılar, mesajları ve klasörleri almak için kullanılabilir.
NOTE: Avantajlarına rağmen, bu yöntemler kullanılarak bile okunamayan bozuk depolama alanlarının bulunduğu belirtilmelidir.
PST Dosyası Gezinme
Aşağıdaki kod örneği, PST dosyasını gezinmeyi ve klasörleri ile mesajları çıkarmayı gösterir. Tanımlayıcıların listesini almak için FindMessages ve FindSubfolders yöntemlerini kullanın. Ardından tanımlayıcı şuna geçilir: ExtractMessage veya GetFolderById elemanları çıkarmak için yöntem.
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);
}
}
}