我使用Redemption在C#中编写程序来遍历 RDOPstStore 中的 RDOMail 对象,并将标记为相关的对象复制到新的 RDOPstStore 。我可以修改 RDOPstStore.IPMRootFolder 中的文件夹,并且只保留一个文件夹(结果)。但是,当我将 RDOMail 项目添加到此文件夹(之前保存在列表中)时,这些项目不会出现在文件夹 Items 成员中。是否有一些我缺少的东西,以确保"添加" RDOMail对象是否保存在 RDOPstStore 对象中?这是代码
//create an output session
RDOSession outputSession = new RDOSession(@"Redemption.RDOSession");
//logon/create output store
outputStore = outputSession.LogonPstStore(outputDir + '\\' + filename);
//clear the output store of any folders, we will leave only one: Results
foreach (RDOFolder folder in outputStore.IPMRootFolder.Folders)
{
folder.Delete(); //successful
}
RDOFolder resultsFolder = outputStore.IPMRootFolder.Folders.Add("Results");
foreach(RDOMail mail in relevantItems) //relevantItems gathered previously
{
resultsFolder.Items.Add(mail); //unsuccessful
resultsFolder.Save();
}
/******************EDIT 5/26****************/
outputStore.Save();
outputSession.Logoff();
/******************END EDIT*****************/
所有人都非常感谢!
答案 0 :(得分:1)
首先,LogonPstStore返回RDOPstStore对象的一个实例 - 没有理由从Stores集合中检索它或者第二次添加它。
outputStore = outputSession.LogonPstStore(outputDir + '\\' + filename);
其次,PST提供程序会在稍后或会话关闭时将更改提交到PST文件。您的应用是否正常终止?你打电话给RDOSession.Logoff吗?
答案 1 :(得分:1)
等一下,您没有保存您添加的消息 - 您在文件夹上调用了save而不是Items.Add返回的项:
RDOMail item = resultsFolder.Items.Add(mail);
item.Save();
答案 2 :(得分:0)
好的,所以我能够发现这个问题。 @Dmitry Streblechenko是正确的,我登录到Pst商店后不需要添加新的PST商店(如有必要,会创建一个新文件)。
但真正的问题是将文件复制到新创建的PST商店。问题是使用RDOFolder.Items.Add(RDOMail)
函数。直观地说,这个Add()
函数可能是正确的(或者至少是有效的)方法是使用RDOMail.CopyTo(RDOMail/RDOFolder)
函数。就这样......
mail.CopyTo(resultsFolder);
这成功地将RDOMail对象放入RDOFolder对象,而Add()函数则没有。作为附注,我读了另一篇@Dmitry帮助的帖子,他提到Add()
函数用于创建新项目,所以它可能不是完全无用的。虽然似乎可以创建一个新的RDOMail对象,修改它,然后使用它的CopyTo()
函数......
经验教训。