兑换无法将项目添加到文件夹

Redemption Cannot add Item to Folder

我正在用 C# 编写一个程序,使用 Redemption 遍历 RDOPstStore 中的 RDOMail 对象并复制标记为与新 RDOPstStore 相关。我可以修改RDOPstStore.IPMRootFolder中的文件夹,这样做只留下一个文件夹(结果)。但是,当我将 RDOMail 项目添加到此文件夹(之前保存在列表中)时,这些项目不会出现在文件夹 Items 成员中。为了确保 "added" 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*****************/

非常感谢大家的帮助!

首先,LogonPstStore returns RDOPstStore 对象的实例 - 没有理由从 Stores 集合中检索它或再次添加它。

outputStore  = outputSession.LogonPstStore(outputDir + '\' + filename);

其次,PST 提供程序稍后或在会话关闭时提交对 PST 文件的更改。您的应用程序是否正常终止?你打电话给RDOSession.Logoff吗?

好的,所以我能够发现问题。 @Dmitry Streblechenko 是对的,我在登录 Pst Store 后不需要添加新的 PST Store(必要时会创建一个新文件)。

但真正的问题在于将文件复制到新创建的 PST 存储区。问题是使用 RDOFolder.Items.Add(RDOMail) 函数。尽管此 Add() 函数很直观,但正确(或至少有效)的方法可能是使用 RDOMail.CopyTo(RDOMail/RDOFolder) 函数。如此...

mail.CopyTo(resultsFolder);

这成功地将 RDOMail 对象放入 RDOFolder 对象,而 Add() 函数却没有。作为旁注,我阅读了另一个 post @Dmitry 的帮助,他提到 Add() 函数用于创建新项目,因此它可能并非完全无用。虽然看起来可以创建一个新的 RDOMail 对象,修改它,然后使用它的 CopyTo() 函数...

吸取教训。

等一下,您没有保存您添加的消息 - 您在 文件夹 而不是返回的 项目 上调用了保存通过 Items.Add:

RDOMail item = resultsFolder.Items.Add(mail);
item.Save();