C#:编辑Outlook 2010昵称缓存

C#:编辑Outlook 2010昵称缓存,c#,autocomplete,outlook,C#,Autocomplete,Outlook,我想写一个程序,可以编辑Outlook 2010的昵称缓存。详细地说,我想删除昵称缓存中的单个联系人 我已经寻找了很长一段时间的解决方案,我发现了很多想法,但没有找到解决方案 我已经得到了自动完成流,但是我不能解析这个字节数组,因为我不知道这个流的编码/结构 有人知道我如何解决我的问题吗 谢谢大家! 致意 Matthias看看MSDN中的文章,它描述了编辑昵称缓存的所有可能方法 对于Outlook 2007,自动完成流存储在与配置文件同名的文件中,扩展名为.nk2。例如,如果使用默认配置文件“o

我想写一个程序,可以编辑Outlook 2010的昵称缓存。详细地说,我想删除昵称缓存中的单个联系人

我已经寻找了很长一段时间的解决方案,我发现了很多想法,但没有找到解决方案

我已经得到了自动完成流,但是我不能解析这个字节数组,因为我不知道这个流的编码/结构

有人知道我如何解决我的问题吗

谢谢大家!

致意 Matthias

看看MSDN中的文章,它描述了编辑昵称缓存的所有可能方法

对于Outlook 2007,自动完成流存储在与配置文件同名的文件中,扩展名为.nk2。例如,如果使用默认配置文件“outlook”,则该文件将被称为“outlook.nk2”。.nk2文件存储在%APPDATA%\Microsoft\Outlook中

Outlook 2010及更高版本

Outlook 2010或Outlook 2013从邮件帐户的传递存储区收件箱的关联内容表中的邮件读取自动完成流。此隐藏消息的消息类和主题为IPM.Configuration.Autocomplete。自动完成流存储在此消息上的PR_ROAMING_BINARYSTREAM属性(PidTagRoamingBinary Canonical属性)中。自动完成数据可以临时缓存在位于%USERPROFILE%\AppData\Local\Microsoft\Outlook\RoamCache中的autocomplete.dat文件中。但是,.dat文件只是一个缓存,当用户退出Outlook 2010及更高版本时,它不用于写回传递存储

在上面提到的页面上,您还可以找到以编程方式编辑缓存的建议:

  • 切勿部分修改自动完成流。支持的交互是1)将整个自动完成流读取到内存中,2)修改内存结构,3)将整个流写回邮件帐户的传递存储区(适用于Outlook 2010或Outlook 2013)的收件箱的关联内容表或本地.nk2文件(Outlook 2007)
  • Outlook运行时不要与自动完成流交互。如果在您修改流时Outlook正在运行,则它可能会在关闭时覆盖您所做的更改
  • 请勿将PT_MV_UNICODE和PR_MV_STRING8类型的属性写入Microsoft Outlook 2003要使用的自动完成流。这些属性仅由Outlook 2007、Outlook 2010和Outlook 2013理解
  • 在开发与Outlook 2007交互的代码时,我们建议您在使用标准文件锁定API(例如,C/C++中的LockFile和C#中的FileStream.lock)进行读写时,锁定.nk2文件,以免被其他进程修改
  • 仅修改自动完成流行集合中类型的属性。有关自动完成流属性和属性类型的详细信息,请参见自动完成流

.nk2文件格式在文档中有详细描述。你也会发现这篇文章很有帮助

谢谢你的回答。不幸的是,我不能在假期前测试它。我会在假期后测试它,然后给出反馈。