如何关闭 .NET 中存档的 Outlook .pst 文件?

问题描述 投票:0回答:1

我可以使用以下 VB 代码打开 Outlook .pst 文件

Dim olApp As Application = New Application()
Dim oNS As [NameSpace] = olApp.GetNamespace("mapi")
Dim sStore As String = "[path to .pst file]"
oNS.Session.AddStore(sStore)
' do something - read messages, whatever 
'oNS.Session.RemoveStore(sStore)
olApp.Close
olApp.Dispose

注意:sStore 是存档 .pst 文件的路径,不在 Outlook 本身中打开。

这有效...但是,在运行它之前我关闭了 Outlook(通常在我的 PC 上运行)。然后,运行此代码后,重新打开 Outlook 时,我看到 .pst 文件已添加/打开,并且可以在 Outlook 中查看。

我想要做的是在代码中关闭它,这样当我重新打开它时它就不会出现在 Outlook 中。我想象注释掉的行 'oNS.Session.RemoveStore(sStore) 会这样做,但事实并非如此 - 事实上 Visual Studio 的智能感知标记了一个潜在错误,告诉我RemoveStore 的预期参数是 Outlook 文件夹,而不是字符串。 (对于 AddStore 它只是一个对象)。对我来说似乎很奇怪(我很无知)-为什么它是一个文件夹?不管怎样,感谢任何有关删除整个“商店”的线索。

(我在这里使用了 VB 代码,但使用 C# 没问题)

  • 更新-

澄清一下:我的 Outlook 有一个 .PST 文件(用于我的 IMAP/POP3 帐户)和两个 Exchange 帐户。使用我正在使用的代码,我想暂时打开另一个 .PST 文件。

按照下面迪米特里的评论,我尝试了该行

oNS.Session.RemoveStore(CType(olApp.Session.Stores(olApp.Session.Stores.Count - 1).GetRootFolder(), Folder))

Dimitri 建议的无法完成,因为 sStore 只是一个字符串,所以我尝试使用最后添加的 olApp.Session“store”的根文件夹。

这产生了意想不到的结果,甚至不一致的结果。 (有一次我的默认 .pst 文件被删除了!)所以我尝试记录,只是为了看看

Dim r As Integer
Dim sb As New StringBuilder
For r = 0 To olApp.Session.Stores.Count - 1
   sb.AppendLine(olApp.Session.Stores(r).FilePath)
Next

并且在不同的运行中,我得到以不同顺序列出的路径!而且,由于某种原因,我刚刚添加的商店的文件路径甚至没有列出,除了添加了一个空行。 ??

所以...我想我需要的是一种方法来知道迭代循环中的“r”对应于我想要删除的.pst 文件。也许只是寻找一个空白的文件路径,但这看起来相当粗糙并且容易产生意想不到的后果 - 必须有一个正确的方法来做到这一点。

.net outlook
1个回答
0
投票

你的循环是错误的 - 所有 OOM 集合都是基于 1 的,而不是 0。它一定是

Dim r As Integer
Dim sb As New StringBuilder
For r = 1 To olApp.Session.Stores.Count
   sb.AppendLine(olApp.Session.Stores(r).FilePath)
Next
© www.soinside.com 2019 - 2024. All rights reserved.