Проблемы с файлом PST при доступе в приложении Windows

В приложении WinForms доступ к корневой папке Microsoft Outlook осуществляется для получения подпапок, специфичных для профиля (с файлом PST). Ниже приведен код, который используется для получения корневой папки из пространства имен Outlook.

Microsoft.Office.Interop.Outlook.Application appOutlook = new Microsoft.Office.Interop.Outlook.Application();
appOutlook.Session.AddStore(sPSTFilePath);
Microsoft.Office.Interop.Outlook.NameSpace nsOutlook = appOutlook.GetNamespace("MAPI");
string sSelectedPSTFileName = Path.GetFileNameWithoutExtension(sPSTFilePath);
MAPIFolder rootFolder = nsOutlook.Stores[sSelectedPSTFileName].GetRootFolder();

Он работает нормально, но в некоторых файлах PST выдает исключение, когда дело доходит до получения корневой папки из пространства имен outlook с именем файла PST по адресу:

MAPIFolder rootFolder = nsOutlook.Stores[sSelectedPSTFileName].GetRootFolder();

Исключение: попытка выполнения операции не удалась. Объект не может быть найден.

Я загрузил этот файл PST в MS Outlook, он работает нормально. Но когда я обращаюсь к этому файлу из кода, он показывает исключение.

Есть ли способ определить, поврежден ли файл PST? Помощь в этом отношении будет оценена.


person Itz.Irshad    schedule 15.01.2014    source источник
comment
Как Outlook показывает этот файл PST в Outlook? Используется ли имя файла без расширения .pst? Или он использует отображаемое имя?   -  person Dmitry Streblechenko    schedule 15.01.2014
comment
Он показывает имя файла без расширения.   -  person Itz.Irshad    schedule 15.01.2014
comment
что произойдет, если вы переберете коллекцию Namespace.Stores? Новый магазин есть? У него ожидаемое имя? Я могу только предложить использовать Redemption - его метод RDOSession.Stores.AddPstStore возвращает рекламный экземпляр объекта RDOPstStore без необходимости обращаться к нему по имени.   -  person Dmitry Streblechenko    schedule 15.01.2014


Ответы (1)


Вы можете попробовать таким образом

OutLook.MAPIFolder outlook_Folder = null;
Microsoft.Office.Interop.Outlook.NameSpace nsOutlook = appOutlook.GetNamespace("MAPI");
outlook_Folder =nsOutlook.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Parent;
Console.WriteLine("Root Folder: " + outlook_Folder.Name);
person sachin    schedule 26.08.2014